<?php

class ProvinsiController extends BaseController
{
    public function list()
    {
        $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' => []]
            ]
        );

        $allProvinsi = MasterProvinsi::find([
            'conditions' => 'provinsi_name ilike :keyword:',
            'bind' => [
                'keyword' => '%' . $params['keyword'] . '%'
            ],
            'limit' => $params['limit'],
            'offset' => $params['offset']
        ]);

        $total_record = MasterProvinsi::count();

        return new PaginatedResponse($allProvinsi, $total_record, $params['limit'], $params['offset']);
    }

    public function listAll()
    {
        $allProvinsi = MasterProvinsi::find();
        return new SimpleResponse([
            'provinsi' => $allProvinsi
        ]);
    }

    public function listDagri()
    {
        $this->checkScopes(['admin.view']);
        $getParams = $this->request->get();

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

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

        $client = new KemendagriClient($this->config["kemendagri_splp_prop"]);
        $provinsis = $client->listProvinsi($params['parameter'], $params['value']);

        return new CollectionPaginatedResponse($provinsis);
    }

    public function compareDagri() {
        $this->checkScopes(['admin.view']);

        $client = new KemendagriClient($this->config["kemendagri_splp_prop"]);
        $dataLocal = MasterProvinsi::find([
            'columns' => 'provinsi_code, provinsi_name'
        ])->toArray();
        $dataDagri = $client->listProvinsi();

        $diff = array_merge(
            WilayahService::compareProvinsiDagriWithDB($dataDagri, $dataLocal),
            WilayahService::compareProvinsiDBWithDagri($dataLocal, $dataDagri)
        );

        return new CollectionPaginatedResponse($diff);
    }
}
