<?php

/**
 * Class PancekKomponenIndikator
 * @property PancekKomponenTemplate[] $templates
 * @property PancekIndikator $indikator
 */
class PancekKomponenIndikator extends Phalcon\Mvc\Model
{
    public $id;
    public $indikator_id;
    public $code;
    public $parent_code;
    public $is_header;
    public $label;
    public $bobot;
    public $formulir_type;
    public $view_order;
    public $created_at;
    public $updated_at;
    public $deleted_at;
    public $label_en;

    public function initialize()
    {
        $this->setSchema("jaga");
        $this->setSource("pancek_komponen_indikator");

        $this->belongsTo(
            'indikator_id',
            'PancekIndikator',
            'id',
            [
                'reusable' => true, // cache related data
                'alias'    => 'indikator',
                'order' => 'id ASC, view_order ASC'
            ]
        );

        $this->hasMany(
            "id",
            \PancekKomponenTemplate::class,
            "komponen_indikator_id",
            [
                'reusable' => true, // cache related data
                'alias'    => 'templates',
                'order' => 'view_order ASC'
            ]
        );
    }

    public function toDetail($columns = null)
    {
        $result = $this->toArray($columns);
        $result['templates'] = [];
        $result['subkomponens'] = [];
        if ($this->is_header) {
            $komponenIndikators = PancekKomponenIndikator::find([
                'conditions' => 'parent_code = :code: AND deleted_at IS NULL AND formulir_type = :formulir_type:',
                'bind' => ['code' => $this->code, 'formulir_type' => $this->formulir_type],
                'order' => 'view_order ASC'
            ]);

            $subKomponens = [];
            foreach ($komponenIndikators as $komponenIndikator) {
                /** @var $komponenIndikator PancekKomponenIndikator */
                $tmp = $komponenIndikator->toArray($columns);
                $tmp['templates'] = [];
                foreach ($komponenIndikator->templates as $template) {
                    array_push($tmp['templates'], $template->getDetail(['id', 'komponen_indikator_id', 'label', 'language']));
                }
                array_push($subKomponens, $tmp);
            }
            $result['subkomponens'] = $subKomponens;
        } else {
            foreach ($this->templates as $template) {
                array_push($result['templates'], $template->getDetail(['id', 'komponen_indikator_id', 'label', 'language']));
            }
        }

        return $result;
    }

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

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