<?php
namespace Jaga\Models\PAK;

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

class PAKIsianSekolah extends BaseModel
{
    use JagaTimestamp, SoftDelete;

    public $id;
    public $sekolah_npsn;

    const STATUS_DRAFT = 1;
    const STATUS_SUBMITTED = 2;
    const STATUS_VERIFIED = 3;
    const STATUS_RETURNED = 4;

    public static $throwableModelName = 'Isian Sekolah';

    public function initialize()
    {
        $this->setSchema("jaga");
        $this->setSource("pak_isian_sekolah");
        $this->belongsTo(
            "sekolah_npsn",
            \Sekolah::class,
            "npsn",
            [
                 'reusable' => true, // cache related data
                 'alias'    => 'sekolah',
            ]
        );
        $this->hasMany(
            "id",
            PAKIsianSekolahDetail::class,
            "isian_id",
            [
                 'reusable' => true, // cache related data
                 'alias'    => 'detail',
            ]
        );
    }

    public function toArray($columns = null)
    {
        $result = parent::toArray($columns);
        $result['status'] = $this->getStringStatus($result['status']);

        return $result;
    }

    public function getDetail($columns = null)
    {
        $result = $this->toArray($columns);
        $result['sekolah'] = $this->sekolah->toSimpleArray(['npsn','nama','kode_provinsi_dagri', 'provinsi','kode_kabupaten_dagri', 'kota_kab','jenjang_id']);
        $isian_details = [];
        $isian_details_name = [];

        if (!empty($this->detail)) {
            foreach ($this->detail as $d) {
                $detail = $d->getDetail([
                    'id',
                    'mata_pelajaran',
                    'kelas',
                    'nama_kegiatan',
                    'link',
                    'deskripsi',
                    'tgl_penerapan',
                    'link_youtube',
                    'link_facebook',
                    'link_blog',
                    'created_at',
                    'updated_at',
                    'metode_id',
                    'is_favorited'
                ]);
                $isian_details[] = $detail;
                $isian_details_name[] = $detail['metode'];
            }
        }

        $result['metode'] = implode(',', $isian_details_name);
        $result['detail'] = $isian_details;

        return $result;
    }

    public function getSimpleDetail()
    {
        $columns = ['id','sekolah_npsn','tahun_ajaran','status','is_published'];
        $result = $this->toArray($columns);
        $result['sekolah'] = $this->sekolah->toSimpleArray(['npsn','nama','provinsi','kota_kab','jenjang_id']);

        $isian_details_name = [];

        if (!empty($this->detail)) {
            foreach ($this->detail as $d) {
                $detail = $d->getDetail([
                    'id',
                    'mata_pelajaran',
                    'kelas',
                    'nama_kegiatan',
                    'link',
                    'deskripsi',
                    'tgl_penerapan',
                    'link_youtube',
                    'link_facebook',
                    'link_blog',
                    'created_at',
                    'updated_at',
                    'metode_id'
                ]);

                $isian_details_name[] = $detail['metode'];
            }
        }

        $result['metode'] = implode(',', $isian_details_name);


        return $result;
    }

    public function getStringStatus($status)
    {
        switch ($status) {
            case self::STATUS_DRAFT:
                return 'Draft';
                break;
            case self::STATUS_SUBMITTED:
                return 'Submitted';
                break;
            case self::STATUS_VERIFIED:
                return 'Verified';
                break;
            case self::STATUS_RETURNED:
                return 'Returned';
                break;
            default:
                return 'Unknown';
                break;
        }
    }

    public function syncDetails($newdetails)
    {
        $currentStacks = PAKIsianSekolahDetail::find([
            'conditions' => 'isian_id = :id:',
            'bind' => ['id' => $this->id]
        ]);

        if ($currentStacks->count() > 0) {
            foreach ($currentStacks as $d) {
                if (!in_array($d->id, $newdetails)) {
                    $d->forceDelete();
                }
            }
        }
    }

    public function listStatus() {
        $result = [
            [
                'key' => self::STATUS_DRAFT,
                'value' => $this->getStringStatus(self::STATUS_DRAFT)
            ],
            [
                'key' => self::STATUS_SUBMITTED,
                'value' => $this->getStringStatus(self::STATUS_SUBMITTED)
            ],
            [
                'key' => self::STATUS_VERIFIED,
                'value' => $this->getStringStatus(self::STATUS_VERIFIED)
            ],
            [
                'key' => self::STATUS_RETURNED,
                'value' => $this->getStringStatus(self::STATUS_RETURNED)
            ],
            [
                'key' => 0,
                'value' => $this->getStringStatus(0)
            ],
        ];

        return $result;
    }

    public static function selectableColumns() {
        return [
            [
                "label"=> "Tahun Ajaran",
                "value"=> "tahun_ajaran"
            ],
            [
                "label"=> "Deskripsi",
                "value"=> "deskripsi"
            ],
            [
                "label"=> "Metode Penerapan",
                "value"=> "metode_penerapan"
            ],
            [
                "label"=> "Informasi",
                "value"=> "informasi"
            ],
            [
                "label"=> "Cerita",
                "value"=> "cerita"
            ],
            [
                "label"=> "Jumlah Foto Kegiatan",
                "value"=> "foto_kegiatan"
            ],
            [
                "label"=> "Jumlah Berkas",
                "value"=> "berkas"
            ],
            [
                "label"=> "Link Facebook",
                "value"=> "link_facebook"
            ],
            [
                "label"=> "Link Youtube",
                "value"=> "link_youtube"
            ],
            [
                "label"=> "Link Blog",
                "value"=> "link_blog"
            ],
            [
                "label"=> "PIC",
                "value"=> "nama_pic"
            ],
            [
                "label"=> "Kontak PIC",
                "value"=> "kontak_pic"
            ],
            [
                "label"=> "Is Favorite?",
                "value"=> "is_favorited"
            ]
        ];
    }
}
