<?php

use Jaga\Models\BaseModel;

class LogPpjErrors extends BaseModel
{
    public $id;
    public $kabupaten_kota_code;
    public $instansi;
    public $periode;
    public $retry_count;
    public $last_error_message;
    public $created_at;
    public $updated_at;
    public $deleted_at;
    public $halaman;

    public function initialize()
    {
        $this->setSchema('jaga');
        $this->setSource('log_ppj_errors');
    }

    public function getSource()
    {
        return 'log_ppj_errors';
    }

    /**
     * @param $parameter
     * @return boolean|LogSekolahErrors
     */
    public static function findFirst($parameter = null)
    {
        return parent::findFirst($parameter);
    }

    /**
     * @param null $parameters
     * @return mixed|LogSekolahErrors[]
     */
    public static function find($parameters = null)
    {
        return parent::find($parameters);
    }

    public static function saveWithData(
        $kabupaten_kota_code,
        $instansi,
        $periode,
        $halaman,
        $last_error_message = null
    ) {
        /** @var $log LogPpjErrors */
        $log = LogPpjErrors::findFirst([
            'conditions' => 'kabupaten_kota_code = :a: and periode = :b: and halaman = :c: and deleted_at is null',
            'bind' => [
                'a' => $kabupaten_kota_code,
                'b' => $periode,
                'c' => $halaman,
            ]
        ]);

        if (!$log) {
            $log = new LogPpjErrors();
            $log->created_at = DateHelper::getNowTimezoned();
        }

        $log->kabupaten_kota_code = $kabupaten_kota_code;
        $log->instansi = $instansi;
        $log->periode = $periode;
        $log->retry_count = (is_null($log->retry_count) ? 0 : $log->retry_count + 1);
        $log->halaman = $halaman;
        $log->last_error_message = $last_error_message;
        $log->updated_at = DateHelper::getNowTimezoned();
        $log->save();
    }

    public static function clearWithData($kabupaten_kota_code, $periode, $halaman)
    {
        /** @var $log LogPpjErrors */
        $log = LogPpjErrors::findFirst([
            'conditions' => 'kabupaten_kota_code = :a: and periode = :b: and halaman = :c: and deleted_at is null',
            'bind' => [
                'a' => $kabupaten_kota_code,
                'b' => $periode,
                'c' => $halaman
            ]
        ]);
        if ($log) {
            $log->deleted_at = DateHelper::getNowTimezoned();
            $log->save();
        }
    }
}
