<?php

use Jaga\Models\BaseModel;

/**
 * Class LogEmail
 * @property Array $mailConfig
 */
class LogEmail extends BaseModel
{
    public $id;
    public $mail_to;
    public $mail_subject;
    public $mail_message;
    public $is_html;
    public $created_at;
    public $created_by;
    public $last_sent;
    public $status;
    public $error_message;

    const STATUS_NEW = "NEW";
    const STATUS_SUCCESS = "SUCCESS";
    const STATUS_FAILED = "FAILED";

    const STATUSES = [self::STATUS_NEW, self::STATUS_SUCCESS, self::STATUS_FAILED];

    const FIELDS_UMUSER = ["um_id", "um_user_name", "nama", "email", "phone", "is_banned", "id_instansi", "checkmark_verified"];

    public function initialize()
    {
        $this->setSchema("jaga");
        $this->setSource("log_email");

        $this->belongsTo(
            "created_by",
            \UmUser::class,
            "um_id",
            [
                'reusable' => true, // cache related data
                'alias'    => 'creator',
            ]
        );
    }

    public static function insert($to, $subject, $message, $isHtml, $creatorId) {
        $model = new LogEmail();
        $model->mail_to = $to;
        $model->mail_subject = $subject;
        $model->mail_message = $message;
        $model->is_html = $isHtml;
        $model->created_at = DateHelper::getNowTimezoned();
        $model->created_by = $creatorId;
        $model->status = self::STATUS_NEW;
        if (!$model->save()) {
            throw new CustomErrorException(BaseResponse::UNEXPECTED_ERROR, "Gagal menyimpan email");
        }
    }

    public function send(MailHelper $mailHelper) {
        try {
            $this->last_sent = DateHelper::getNowTimezoned();
            $mailHelper->sendMail($this->mail_to, $this->mail_subject, $this->mail_message, $this->is_html);
            $this->status = self::STATUS_SUCCESS;
        } catch (\Exception $e) {
            $this->error_message = substr($e->getMessage(), 0 , 3000);
            $this->status = self::STATUS_FAILED;
        }

        $this->save();
    }
}
