<?php

class PajakTunggakan extends Phalcon\Mvc\Model
{
    /**
     *
     * @var integer
     */
    public $id;
    /**
     *
     * @var integer
     */
    public $instansi_id;
    /**
     *
     * @var integer
     */
    public $tahun;
    /**
     *
     * @var double
     */
    public $tunggakan_pajak; 
    /**
     *
     * @var integer
     */
    public $created_by;
    /**
     *
     * @var datetime
     */
    public $created_at;
    /**
     *
     * @var integer
     */
    public $updated_by;
    /**
     *
     * @var datetime
     */
    public $updated_at;
    /**
     *
     * @var integer
     */
    public $deleted_by;
    /**
     *
     * @var datetime
     */
    public $deleted_at;

    /**
     * Initialize method for model.
     */
    public function initialize()
    {
        $this->setSchema('jaga');
        $this->setSource('pajak_tunggakan');
        $this->hasMany(
            'id',
            PajakTunggakanDetail::class,
            'pajak_tunggakan_id',
            ['alias' => 'Details']
        );
    }

    /**
     * Returns table name mapped in the model.
     *
     * @return string
     */
    public function getSource()
    {
        return 'pajak_tunggakan';
    }

    /**
     * Allows to query a set of records that match the specified conditions
     *
     * @param mixed $parameters
     * @return PajakTunggakan[]|PajakTunggakan|\Phalcon\Mvc\Model\ResultSetInterface
     */
    public static function find($parameters = null)
    {
        return parent::find($parameters);
    }

    /**
     * Allows to query the first record that match the specified conditions
     *
     * @param mixed $parameters
     * @return PajakTunggakan|\Phalcon\Mvc\Model\ResultInterface
     */
    public static function findFirst($parameters = null)
    {
        return parent::findFirst($parameters);
    }
    

   public function toArraySimple()
{
    $result = $this->toArray();

    // Initialize fields
    $result['nama_instansi'] = '';
    $result['created_by_name'] = '';
    $result['updated_by_name'] = '';
    $result['total_attachments'] = 0;
    $result['total_penagihan_pajak'] = 0;

    // Fetch related Instansi
    if (!empty($this->instansi_id)) {
        $instansi = Instansi::findFirst($this->instansi_id);
        $result['nama_instansi'] = $instansi ? $instansi->nama : '';
    }

    // Fetch created_by and updated_by names
    $userIds = array_filter([$this->created_by, $this->updated_by]);
    if (!empty($userIds)) {
        $users = UmUser::find([
            'conditions' => 'um_id IN ({user_ids:array})',
            'bind' => ['user_ids' => $userIds]
        ]);

        foreach ($users as $user) {
            if ($user->um_id == $this->created_by) {
                $result['created_by_name'] = $user->nama;
            }
            if ($user->um_id == $this->updated_by) {
                $result['updated_by_name'] = $user->nama;
            }
        }
    }

    // Calculate total attachments
    $result['total_attachments'] = AttachmentAsetPajak::count([
        'conditions' => 'tipe_submodul = :tipe_submodul: AND data_id = :data_id: AND deleted_at IS NULL',
        'bind' => [
            'tipe_submodul' => AttachmentAsetPajak::SUB_MODUL_PAJAK_TUNGGAKAN,
            'data_id' => $this->id
        ]
    ]);

    // Calculate total_penagihan_pajak
    $listPajakPenagihan = PajakPenagihan::find([
        'conditions' => 'instansi_id = :instansi_id: AND tahun = :tahun: AND deleted_at IS NULL',
        'bind' => [
            'instansi_id' => $this->instansi_id,
            'tahun' => $this->tahun
        ]
    ]);

    foreach ($listPajakPenagihan as $pajakPenagihan) {
        $result['total_penagihan_pajak'] += $pajakPenagihan->capaian_penagihan_pajak;
    }

    return $result;
}


    public function toArrayDetail()
    {
        $result = $this->toArray();

        $result['nama_instansi'] = '';
        if(!empty($this->instansi_id)) {
            $instansi = Instansi::findFirst($this->instansi_id);
            
            if(!empty($instansi)) {
                $result['nama_instansi'] = $instansi->nama;
            }
        }

        $result['jenis_pajak'] = '';
        if(!empty($this->id_jenis_pajak)) {
            $jenisPajak = MasterJenisPajak::findFirst($this->id_jenis_pajak);

            if(!empty($jenisPajak)) {
                $result['jenis_pajak'] = $jenisPajak->jenis_pajak;
            }
        }

        $result['created_by_name'] = '';
        if(!empty($this->created_by)) {
            $createdBy = UmUser::findFirst(
                [
                    'um_id = :id:',
                    "bind" => [
                        "id" => $this->created_by
                    ]
                ]
            );

            if(!empty($createdBy)) {
                $result['created_by_name'] = $createdBy->nama;
            }
        }

        $result['updated_by_name'] = '';
        if(!empty($this->updated_by)) {
            $updatedBy = UmUser::findFirst(
                [
                    'um_id = :id:',
                    "bind" => [
                        "id" => $this->updated_by
                    ]
                ]
            );

            if(!empty($updatedBy)) {
                $result['updated_by_name'] = $updatedBy->nama;
            }
        }

        $result['attachments'] = [];
        $mapAttachment = AttachmentAsetPajak::find(
            [
                "tipe_submodul = :tipe_submodul: and data_id = :data_id: and deleted_at is null",
                "bind" => [
                    "tipe_submodul" => AttachmentAsetPajak::SUB_MODUL_PAJAK_TUNGGAKAN,
                    "data_id" => $this->id
                ]
            ]
        );

        if(!empty($mapAttachment)) {
            $arrIdAttachment = [0];
            foreach ($mapAttachment as $item ) {
                $arrIdAttachment[] = $item->attachment_id;
            }

            $result['attachments'] = Attachments::find(
                [
                    "id in ({list_id:array}) and deleted_at is null",
                    "bind" => [
                        "list_id" => $arrIdAttachment
                    ]
                ]
            )
            ->toArray();
        }

        return $result;
    }
}

?>