<?php
use PHPMailer\PHPMailer\PHPMailer;

class MailHelper
{
    protected $mail;
    private $prop;

    public function __construct($prop)
    {
        $mail = new PHPMailer(true);
        $mail->setFrom($prop["from"]);
        $mail->addReplyTo($prop["from"]);
        if (array_key_exists("mail_server", $prop) && $prop["mail_server"] === "smtp") {
            $mail->isSMTP();
            $mail->SMTPSecure = $prop["mail_encription"];
            $mail->Host = $prop["mail_host"];
            $mail->Port = $prop["mail_port"];
            $mail->SMTPAuth = true;
            $mail->Username = $prop["mail_username"];
            $mail->Password = $prop["mail_password"];
            $mail->CharSet = "utf-8";
            $mail->SMTPOptions = array(
                'ssl' => array(
                    'verify_peer' => false,
                    'verify_peer_name' => false,
                    'allow_self_signed' => true
                )
            );
        } else {
            $mail->isSendmail();
        }

        $this->mail = $mail;
        $this->prop = $prop;
    }

    public function sendMail($to, $subject, $message, $isHTML = false)
    {
        $mail = $this->mail;
        $mail->clearAddresses();
        $mail->addAddress($to);
        $mail->Subject = $subject;
        $mail->Body = $message;
        $mail->IsHTML($isHTML);

        $mail->send();
    }

    public function queue($to, $subject, $message, $isHTML = false, $creatorId = 0)
    {
        /**
         * #1100 - pengiriman email/notif tidak menggunakan beanstlakd lagi
         */
//        $bg = new BackgroundJob(
//            [
//                "host" => getenv("BEANSTALK_SERVER"),
//                "port" => getenv("BEANSTALK_PORT")
//            ]
//        );
//
//        $bg->put(
//            'MailHelper',
//            $this->prop,
//            'sendMail',
//            [
//                $to,
//                $subject,
//                $message,
//                $isHTML
//            ],
//            0
//        );
//        $this->sendMail($to, $subject, $message, $isHTML);

        try {
            $enableBackground = AppConfig::getValueByKode("USE_MAIL_BACKGROUND") === 'true';
        } catch (\Exception $e) {
            $enableBackground = false;
        }
        if ($enableBackground) {
            LogEmail::insert($to, $subject, $message, $isHTML, $creatorId);
        } else {
            $this->sendMail($to, $subject, $message, $isHTML);
        }
    }

    /**
     * @param String $mailTo Email tujuan
     * @param String $nameFrom Nama pengirim
     * @param String $webBaseUrl
     * @param Diskusi $diskusi
     */
    public function mailDiskusiCommentReply(string $mailTo, string $nameFrom, $webBaseUrl, Diskusi $diskusi) {
        $link = $webBaseUrl . '/diskusi/detail/' . $diskusi->uuid;
        $message = "$nameFrom membalas komentar Anda dalam diskusi <br> <a href='$link'>$diskusi->title</a>";
        $this->queue(
            $mailTo,
            "[JAGA] Balasan Komentar Diskusi",
            "$message",
            true
        );
    }
}
