<?php
namespace Jaga\Models\PAK;

use Jaga\Models\BaseModel;
use Jaga\Traits\JagaTimestamp;
use Jaga\Traits\SoftDelete;
use Jaga\Models\PAK\PAKImplementasiAttachment;

class PAKImplementasiVerifikasi extends BaseModel
{
    use JagaTimestamp, SoftDelete;

    public static $throwableModelName = 'Verifikasi Implementasi PAK';

    public function initialize()
    {
        $this->setSchema("jaga");
        $this->setSource("pak_verifikasi_implementasi");
        $this->belongsTo(
            "questionnaire_id",
            "Jaga\Models\PAK\PAKQuestionnaire", 
            "id",
            [
                 'reusable' => true, // cache related data
                 'alias'    => 'questionnaire',
            ]
        );
        $this->belongsTo(
            "implementasi_id", 
            "Jaga\Models\PAK\PAKImplementasi", 
            "id",
            [
                 'reusable' => true, // cache related data
                 'alias'    => 'implementasi',
            ]
        );
        $this->hasMany(
            "id", 
            "Jaga\Models\PAK\PAKImplementasiAttachment", 
            "verifikasi_id",
            [
                 'reusable' => true, // cache related data
                 'alias'    => 'attachments',
            ]
        );
    }

    public function toArray($columns = null)
    {
        $result = parent::toArray($columns);

        return $result;
    }

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

        $questionnaire = $this->questionnaire;
        $attachments = [];
        $attachmentColumns = [
            'id', 
            'verifikasi_id', 
            'attachment_id', 
            'created_at', 
            'created_by', 
            'jenis_dokumen_id', 
            'tahun', 
            'nomor', 
            'tentang', 
            'tanggal_ttd'
        ];
        
        if (!empty($this->attachments)) {
            foreach ($this->attachments as $a) {
                $detail = $a->getDetail($attachmentColumns);
                array_push($attachments, $detail);
            }
        }

        $result['questionnaire'] = $questionnaire->nama;
        $result['attachments'] = $attachments;

        return $result;
    }

    public function syncAttachments($attachment_ids)
    {
        $attachments = PAKImplementasiAttachment::find([
            'conditions' => 'verifikasi_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 clearAttachments()
    {
        $attachments = PAKImplementasiAttachment::find([
            'conditions' => 'verifikasi_id = :id:',
            'bind' => ['id' => $this->id]
        ]);

        if ($attachments->count() > 0) {
            foreach ($attachments as $a) {
                $a->forceDelete();
            }
        }
    }

    public function beforeDelete()
    {
        return $this->clearAttachments();
    }
}