<?php

class KIPController extends BaseController
{
    public function summary_jenjang()
    {
        $model = new KipSummary2017();
        $result = $model->summary_jenjang();
        $totalResult = count($result);
        return new PaginatedResponse($result, $totalResult, $totalResult, 0);
    }

    public function summary_nasional()
    {
        $validatedRequest = $this->validate(
            $this->request->get(),
            [
                'jenjang' => ['validators' => ['required', 'digit']]
            ]
        );

        $model = new KipSummary2017();
        $result = $model->summary_nasional($validatedRequest['jenjang']);
        $totalResult = count($result);
        return new PaginatedResponse($result, $totalResult, $totalResult, 0);
    }

    public function summary_provinsi()
    {
        $getParams = $this->request->get();

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

        $validatedRequest = $this->validate(
            $getParams,
            [
                'jenjang' => ['validators' => ['required']],
                'provinsi' => ['validators' => ['required']]
            ]
        );

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

        $model = new KipSummary2017();
        $result = $model->summary_provinsi($getParams['jenjang'], $getParams['provinsi']);
        $totalResult = count($result);
        return new PaginatedResponse($result, $totalResult, $totalResult, 0);
    }

    public function summary_kota_kabupaten()
    {
        $params = $this->request->get();
        $params['nomenklatur'] = array_key_exists('nomenklatur', $params) ? $params['nomenklatur'] : '';
        $params['limit'] = $this->getDefaultLimit($params);
        $params['offset'] = array_key_exists('offset', $params) ? $params['offset'] : 0;

        $validatedRequest = $this->validate(
            $params,
            [
                'jenjang' => ['validators' => ['required']],
                'kota_kabupaten' => ['validators' => ['required']],
                'limit' => ['validators' => ['digit']],
                'offset' => ['validators' => ['digit']],
            ]
        );

        $validatedRequest = $this->validate(
            $params,
            [
                'jenjang' => ['validators' => ['required']]
            ]
        );

        $model = new Kip2017();
        $result = $model->summary_kota_kabupaten(
            $params['jenjang'],
            $params['kota_kabupaten'],
            $params['nomenklatur'],
            $params['limit'],
            $params['offset']
        );
        $allCount = count(
            $model->summary_kota_kabupaten_count(
                $params['jenjang'],
                $params['kota_kabupaten'],
                $params['nomenklatur']
            )
        );
        return new PaginatedResponse($result, $allCount, $params['limit'], $params['offset']);
    }

    public function sekolah_detail()
    {
        $validatedRequest = $this->validate(
            $this->request->get(),
            [
                'npsn' => ['validators' => ['required']]
            ]
        );

        $model = new Kip2017();
        $results = $model->sekolah_detail($validatedRequest['npsn'])->toArray();
        $res = [];
        if (count($results) > 0) {
            $sekolahModel = new Sekolah();
            $sekolah = $sekolahModel->find(
                array(
                    'npsn = :npsn:',
                    'bind' => array(
                        'npsn' => $validatedRequest['npsn']
                    )
                )
            );

            if (!empty($sekolah)) {
                for ($i = 0; $i < count($results); $i++) {
                    $res[$i] = $results[$i];
                    $res[$i]['sekolah'] = $sekolah;
                }
            }
        }

        $totalResult = count($res);
        return new PaginatedResponse($res, $totalResult, $totalResult, 0);
    }

    public function detail()
    {
        $validatedRequest = $this->validate(
            $this->request->get(),
            [
                'nisn' => ['validators' => ['required']]
            ]
        );

        $model = new Kip2017();
        $result = $model->detail($validatedRequest['nisn']);
        $totalResult = count($result);
        return new PaginatedResponse($result, $totalResult, $totalResult, 0);
    }

    public function detail_live()
    {
        $this->checkIsAuthenticated();

        $tahun_list = [2020, 2019, 2018, 2017];

        $params = $this->validate(
            $this->request->get(),
            [
                'nisn' => ['validators' => ['required']],
                'jenjang' => ['validators' =>  [[
                    'name' => 'inclusion_in',
                    'params' => ['sd', 'smp', 'sma', 'smk']
                ]]]
            ]
        );

        $kipClient = new KipClient($this->config["kip_prop"]);
        $result = [];

        foreach ($tahun_list as $tahun) {
            try {
                $kipClient->setLogger($this->logger);
                $response = $kipClient->check($params['jenjang'], $params['nisn'], $tahun);

                if (empty($response)) {
                    throw new CustomErrorException(BaseResponse::UNEXPECTED_ERROR, "Gagal Menghubungi Service SIPINTAR KEMENDIKBUD");
                }

                if (array_key_exists('status', $response) && (int)$response['status'] == 0) {
                    $result[] = $response['data'];
                }
            } catch (\Exception $e) {
            }
        }

        return new CollectionPaginatedResponse($result);
    }
}
