<?php

class KepadatanPendudukAllController extends BaseController
{
    public function list()
    {
        $this->checkIsAuthenticated();

        $getParams = $this->request->get();

        $getParams['limit'] = $this->getDefaultLimit($getParams);
        $getParams['offset'] = array_key_exists('offset', $getParams) ? $getParams['offset'] : 0;
        $getParams['keyword'] = array_key_exists('keyword', $getParams) ? $getParams['keyword'] : '';

        $params =  $this->validate(
            $getParams,
            [
                'limit' => ['validators' => ['digit']],
                'offset' => ['validators' => ['digit']],
                'keyword' => ['validators' => []]
            ]
        );

        $kpa = KepadatanPendudukAll::find([
            'conditions' => 'nama_wilayah ilike :keyword:',
            'bind' => [
                'keyword' => '%' . $params['keyword'] . '%'
            ],
            'limit' => $params['limit'],
            'offset' => $params['offset']
        ]);

        $total_record = KepadatanPendudukAll::count();

        return new PaginatedResponse($kpa, $total_record, $params['limit'], $params['offset']);
    }
    public function detail($kode_pemda)
    {
        $getKepadatanPenduduk = KepadatanPendudukAll::findFirst(
            [
                'kode_pemda = :kode_pemda:',
                "bind" => [
                    "kode_pemda" => $kode_pemda
                ],
                "order" => "updated_date DESC"
            ]
        );

        if (empty($getKepadatanPenduduk)) {
            throw new CustomErrorException(BaseResponse::INVALID_REQUEST, 'Data Pemda tidak ditemukan');
        }

        $result = $getKepadatanPenduduk->toDetail();

        return new CollectionPaginatedResponse([$result]);
    }
    public function detailSkpd($kode_pemda)
    {
        $getParams = $this->request->get();

        $getParams['tahun'] = array_key_exists('tahun', $getParams) ? $getParams['tahun'] : null;

        $params =  $this->validate(
            $getParams,
            [
                'tahun' => ['validators' => ['digit']]
            ]
        );

        $result = $this->rawQuery("
            SELECT sk.pagu, sk.urai FROM jaga.sipd_kegiatan sk
            JOIN (SELECT * FROM jaga.sipd_skpd) ss on ss.id = sk.id_sipd_program
            JOIN (SELECT * FROM jaga.kepadatan_penduduk_all) kpa on kpa.kode_pemda = ss.kode_pemda
            WHERE ss.kode_pemda = :kode_pemda AND tahun = :tahun
            ", [
            'kode_pemda' => $kode_pemda,
            'tahun' => $params['tahun']
        ]);

        return new CollectionPaginatedResponse($result);
    }
}
