<?php

/**
 * Class LitbangKajianPengajuan
 * @property LitbangKajianPengajuanAttachment[] $attachments
 * @property Instansi $instansi
 * @property LitbangKajianSektor $sektor
 * @property LitbangSatgas $satgas
 */
class LitbangKajianPengajuan extends \Jaga\Models\BaseModel
{
    public $id;
    public $sektor_id;
    public $jenis_id;
    public $satgas_id;
    public $judul;

    public $pt_pertimbangan_pemilihan_topik;
    public $pt_daftar_peneliti;
    public $pt_kontak_peneliti;
    public $pt_created_by;
    public $pt_assign_to;

    public $rkk_studi_pendahuluan;
    public $rkk_masalah_hipotesa;
    public $rkk_pengumpulan_data_sekunder;
    public $rkk_studi_literatur;
    public $rkk_lingkup_kajian;
    public $rkk_instansi_id;
    public $rkk_created_by;
    public $rkk_assign_to;

    public $krs_deskripsi;
    public $krs_checklist;
    public $krs_created_by;
    public $krs_assign_to;
    public $krs_tgl_mulai;
    public $krs_tgl_selesai;
    public $krs_tgl_realisasi;

    public $kom_notulensi;
    public $kom_created_by;
    public $kom_assign_to;
    public $kom_tgl_mulai;
    public $kom_tgl_selesai;
    public $kom_tgl_realisasi;

    public $pk_is_pihak_ketiga;
    public $pk_pihak_ketiga;
    public $pk_created_by;
    public $pk_assign_to;
    public $pk_tgl_mulai;
    public $pk_tgl_selesai;
    public $pk_tgl_realisasi;

    public $kl_perumusan_masalah;
    public $kl_metode_penelitian;
    public $kl_tujuan_penelitian;
    public $kl_kerangka_teori;
    public $kl_gambaran_umum;
    public $kl_teknis_penulisan;
    public $kl_created_by;
    public $kl_assign_to;
    public $kl_tgl_mulai;
    public $kl_tgl_selesai;
    public $kl_tgl_realisasi;

    public $rd_created_by;
    public $rd_assign_to;
    public $rd_tgl_mulai;
    public $rd_tgl_selesai;
    public $rd_tgl_realisasi;

    public $pap_tgl_internal_deputi;
    public $pap_tgl_internal_direktur;
    public $pap_tgl_internal_eksternal;
    public $pap_is_diseminasi;
    public $pap_diseminasi;
    public $pap_created_by;
    public $pap_assign_to;
    public $pap_tgl_mulai;
    public $pap_tgl_selesai;
    public $pap_tgl_realisasi;

    /**
     * @var string
     */
    public $status;

    /**
     * @var string
     */
    public $tahapan;

    /**
     * @var string
     */
    public $approval_note;

    /**
     * @var string
     */
    public $created_at;

    /**
     * @var string
     */
    public $updated_at;

    /**
     * @var string
     */
    public $deleted_at;

    const TAHAPAN_PT = "PT";
    const TAHAPAN_RKK = "RKK";
    const TAHAPAN_KRS = "KRS";
    const TAHAPAN_KOM = "KOM";
    const TAHAPAN_PK = "PK";
    const TAHAPAN_KL = "KL";
    const TAHAPAN_RD = "RD";
    const TAHAPAN_PAP = "PAP";
    const TAHAPAN_PUB = "PUBLISHED";

    const APPROVED = 1;
    const REJECTED = 0;

    const STATUS_DRAFT = "DRAFT";
    const STATUS_PROCESS = "PROCESS";
    const STATUS_REJECTED = "REJECTED";
    const STATUS_PUBLISHED = "PUBLISHED";

    const DOCUMENT_DIR = "litbang-kajian-pengajuan" . DIRECTORY_SEPARATOR;

    /**
     * Initialize method for model.
     */
    public function initialize()
    {
        $this->setSchema("jaga");
        $this->setSource("litbang_kajian_pengajuan");
        $this->hasMany(
            "id",
            \LitbangKajianPengajuanAttachment::class,
            "kajian_pengajuan_id",
            [
                'reusable' => true, // cache related data
                'alias'    => 'attachments',
            ]
        );
        $this->hasOne('rkk_instansi_id', \Instansi::class, 'id');
        $this->hasOne(
            'sektor_id',
            \LitbangKajianSektor::class,
            'id',
            [
                'reusable' => true, // cache related data
                'alias'    => 'sektor',
            ]
        );
        $this->hasOne(
            'satgas_id',
            \LitbangSatgas::class,
            'id',
            [
                'reusable' => true, // cache related data
                'alias'    => 'satgas',
            ]
        );
    }

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

    public static function find($parameters = null)
    {
        return parent::find($parameters);
    }

    public static function findFirst($parameters = null)
    {
        return parent::findFirst($parameters);
    }

    public function getDetail($columns = null)
    {
        $result = $this->toArray($columns);

        // LitbangKajianPengajuanAttachment relation
        $attachments = [];
        $attachmentColumns = [
            'id',
            'attachment_id',
            'kajian_pengajuan_id',
            'tahapan'
        ];
        if (!empty($this->attachments)) {
            foreach ($this->attachments as $a) {
                $detail = $a->getDetail($attachmentColumns);
                array_push($attachments, $detail);
            }
        }
        $result['attachments'] = $attachments;

        // Instansi relation
        if ($this->instansi) {
            $result['rkk_instansi'] = $this->instansi->toArray(['id','nama','id_provinsi', 'id_kota_kabupaten']);
        }

        // Sektor relation
        if ($this->sektor) {
            $result['sektor'] = $this->sektor->toArray(['id','nama']);
        }

        // Satgas relation
        if ($this->satgas) {
            $result['satgas'] = $this->satgas->toArray(['id', 'nama']);
        }

        return $result;
    }

    public function syncAttachments($attachment_ids, $tahapan)
    {
        $attachments = LitbangKajianPengajuanAttachment::find([
            'conditions' => 'kajian_pengajuan_id = :id: AND tahapan LIKE :tahapan:',
            'bind' => ['id' => $this->id, 'tahapan' => $tahapan]
        ]);

        if ($attachments->count() > 0) {
            foreach ($attachments as $attachment) {
                if (!in_array($attachment->attachment_id, $attachment_ids)) {
                    $attachment->forceDelete();
                }
            }
        }
    }
}
