<?php

use Phalcon\Mvc\Model\Query;
/**
 * Class LitbangKajianRepositori
 * @property LitbangKajianRepositoriAttachment[] $attachments
 * @property LitbangKajianKlpd[] $klpds
 * @property LitbangKajianPengajuan $pengajuan
 * @property LitbangKajianSektor $sektor
 */
class LitbangKajianRepositori extends \Jaga\Models\BaseModel
{
    public $id;
    public $sektor_id;
    public $pengajuan_id;
    public $tahun;
    public $kode;
    public $judul;
    public $latar_belakang;
    public $tujuan_penelitian;
    public $metode_pengumpulan_data;
    public $lokasi_subyek;
    public $abstrak;
    public $kata_kunci;
    public $kesimpulan;
    public $daftar_peneliti;
    public $kontak_peneliti;
    public $tgl_presentasi;
    public $tgl_publikasi;
    public $mitra_kerjasama;
    public $narasumber;
    public $status;
    public $src;
    public $created_at;
    public $updated_at;
    public $deleted_at;

    const DOCUMENT_DIR = "litbang-kajian-pengajuan";

    const STATUS_DRAFT = 'DRAFT';
    const STATUS_PUBLISHED = 'PUBLISHED';

    const SRC_REPOSITORI = "REPOSITORI";
    const SRC_PENGAJUAN = "PENGAJUAN";

    /**
     * Initialize method for model.
     */
    public function initialize()
    {
        $this->setSchema("jaga");
        $this->setSource("litbang_kajian_repositori");
        $this->hasMany(
            "id",
            \LitbangKajianRepositoriAttachment::class,
            "kajian_repositori_id",
            [
                'reusable' => true, // cache related data
                'alias'    => 'attachments',
            ]
        );
        $this->hasMany(
            'id',
            'LitbangKajianKlpd',
            'kajian_id',
            [
                'reusable' => true, // cache related data
                'alias'    => 'klpds',
                'params'   => [
                    'conditions' => 'src = :src: AND deleted_at IS NULL',
                    'bind'       => [
                        'src' => LitbangKajianKlpd::SRC_REPOSITORI,
                    ]
                ]
            ]
        );
        $this->hasOne(
            'pengajuan_id',
            \LitbangKajianPengajuan::class,
            'id',
            [
                'reusable' => true, // cache related data
                'alias'    => 'pengajuan',
            ]
        );
        $this->hasOne(
            'sektor_id',
            \LitbangKajianSektor::class,
            'id',
            [
                'reusable' => true, // cache related data
                'alias'    => 'sektor',
            ]
        );
    }

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

    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);

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

        // LitbangKajianKlpd relation
        $result['klpds'] = $this->klpds;

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

        // Pengajuan relation
        if ($this->pengajuan) {
            $result['pengajuan'] = $this->pengajuan->toArray();
        }

        return $result;
    }

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

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

    public function generateCode() {
        $date = date('Y-m-d 00:00:00');
        $query = self::query()
            ->where("date_trunc('day', created_at) = :date:")
            ->bind(['date' => $date])
            ->execute();
        $count = sizeof($query);

        return date('Ymd') . str_pad(($count+1), 2, 0, STR_PAD_LEFT);
    }
}
