<?php
namespace App\Controllers\Kewilayahan\IdentAktifitasHasil\PerubahanPerilaku;

use App\Libraries\AldLibrary;

class Pendaftaran extends \App\Controllers\Kewilayahan\Kytp
{

    public function detail()
    {
        $dataRaw   = $this->dataRaw('raw')->getResultArray();
        $dataCount = $this->dataRaw('count')->getRow();
        $ret       = [
            'data' => $dataRaw,
            'meta' => ['totalRowCount' => $dataCount->JML],
        ];
        return $this->respond($ret, 200);
    }

    private function dataRaw($type)
    {
        $Ald      = new AldLibrary;
        $username = session('nip');
        $start    = $this->request->getGet('start');
        // $start    = ($start > 100) ? 100 : $start;
        $size    = $this->request->getGet('size');
        $size    = ($size > 101) ? 101 : $size;
        $request = json_decode(file_get_contents('php://input'));

        $opsiWilZona = $Ald->decryptMe($request->opsiWilZona ?? '', $username);
        $adm4_pcode  = [];
        foreach ($request->adm4_pcode ?? [] as $key => $value) {
            $adm4_pcode[] = $Ald->decryptKpdl($value, $username);
        }

        $id_poly_zona = [];
        foreach ($request->id_poly_zona ?? [] as $key => $value) {
            $id_poly_zona[] = $Ald->decryptMe($value, $username);
        }

        $nip_ar_perekam = [];
        foreach ($request->nip_ar_perekam ?? [] as $key => $value) {
            $nip_ar_perekam[] = $Ald->decryptMe($value, $username);
        }

        $nip_ar_pengampu = [];
        foreach ($request->nip_ar_pengampu ?? [] as $key => $value) {
            $nip_ar_pengampu[] = $Ald->decryptMe($value, $username);
        }

        $globalFilter = $this->request->getGet('globalFilter'); //string
        $filters      = json_decode($this->request->getGet('filters')); //     [{"id":"MERK_USAHA","value":"toko"},{"id":"ALAMAT","value":"graha"}]
        $sorting      = json_decode($this->request->getGet('sorting')); //    [{"id":"ALAMAT","desc":false}]

        $db   = \Config\Database::connect();
        $data = $db->table('KPDL_MV_LOKASI_SUBJEK A')->distinct()
            ->select('A.NPWP, A.NAMA_WP, A.ALAMAT_MFWP, A.KELURAHAN_MFWP, A.KECAMATAN_MFWP, A.KOTA_MFWP, A.PROPINSI_MFWP,
            A.KPPADM_MFWP, A.NAMA_AR_MFWP, A.FLAG_WPS_WPK, A.STATUS_WP_MFWP, A.JNS_WP_MFWP, A.STATUS_SPT_TAHUNAN_TERAKHIR,
            A.TGL_DAFTAR,JUMLAH_PEMBAYARAN_THN_TERAKHIR')
            ->join('KPDL_MV_PENDAFTARAN_PERTAMA C', 'A.NO_IDENTITAS = C.NO_IDENTITAS AND A.CREATION_DATE <= C.TGL_DAFTAR', 'inner');

        if ($opsiWilZona == 'wilayah') {
            $data->whereIn('ADM4_PCODE', $adm4_pcode);
        }

        if ($opsiWilZona == 'zona') {
            $data->whereIn('ID_POLY_ZONA', $id_poly_zona);
        }

        if ($opsiWilZona == 'perekam') {
            $data->whereIn('CREATED_BY', $nip_ar_perekam);
        }

        if ($opsiWilZona == 'pengampu') {
            $data->whereIn('NIP_AR_PENGAMPU', $nip_ar_pengampu);
        }
        if (session('kppadm') != '000') {
            $data->groupStart();
            $data->join('KPDL_ZP_NAS_DIFF B', 'ID_POLY_ZONA = B.OGC_FID');
            if (session('tpkantor') == 'Kanwil') { // kanwil

                $data->orGroupStart();
                $data->where('B.KD_KANWIL', session('kwladm'));
                $data->groupEnd();
            }
            if (session('tpkantor') == 'KPP') { //KPP

                $currentPegawai = currentPegawai();
                if (in_array($currentPegawai->KD_JAB_STRUKTURAL, ['602'])) { //AR
                    //zona
                    $data->orGroupStart()
                        ->where('B.KD_UNIT_OR', $currentPegawai->KD_UNIT_ORGANISASI)
                        ->where('A.KPPADM_ZONA', session('kppadm'))
                        ->where('A.NIP_AR_ZONA', session('nip'))
                        ->groupEnd();

                    //perekam
                    $data->orGroupStart()
                        ->where('A.KODE_PEG_PEREKAM', session('kppadm') . '-' . $currentPegawai->KD_UNIT_ORGANISASI . '-' . session('nip')) //direkam saat di seksi aktif saat ini
                        ->groupEnd();

                    //pengampu
                    $data->orGroupStart()
                        ->where('A.NIP_AR_PENGAMPU', session('nip'))
                        ->where('A.KPPADM_PENGAMPU', session('kppadm'))
                        ->groupEnd();
                } else if (in_array($currentPegawai->KD_JAB_STRUKTURAL, ['401']) && substr($currentPegawai->NAMA_UNIT_ES4, 0, 16) == 'Seksi Pengawasan') { //kasi
                    //zona
                    $data->orGroupStart()
                        ->where('B.KD_UNIT_OR', $currentPegawai->KD_UNIT_ORGANISASI)
                        ->where('A.KPPADM_ZONA', session('kppadm'))
                        ->groupEnd();

                    //perekam
                    $data->orGroupStart()
                        ->where('A.KODE_SEKSI_PEREKAM', session('kppadm') . '-' . $currentPegawai->KD_UNIT_ORGANISASI)
                        ->groupEnd();

                    //pengampu
                    $data->join('PEGAWAI C', 'A.NIP_AR_PENGAMPU=C.NIP9', 'left');
                    $data->orGroupStart()
                        ->where('C.KD_UNIT_ORGANISASI', $currentPegawai->KD_UNIT_ORGANISASI)
                        ->where('C.KPPADM', session('kppadm'))
                        ->where('A.KPPADM_PENGAMPU', session('kppadm'))
                        ->groupEnd();
                } else if (in_array($currentPegawai->KD_JAB_STRUKTURAL, ['304']) || $currentPegawai->NAMA_UNIT_ES4 == 'Seksi Penjaminan Kualitas Data') { //Kepala Kantor
                    //zona
                    $data->orGroupStart()
                        ->where('A.KPPADM_ZONA', session('kppadm'))
                        ->groupEnd();

                    //perekam
                    $data->orGroupStart()
                        ->where('A.KPP_ADM_PEREKAM', session('kppadm') . '-' . $currentPegawai->KD_UNIT_ORGANISASI)
                        ->groupEnd();

                    //pengampu
                    $data->join('PEGAWAI C', 'A.NIP_AR_PENGAMPU=C.NIP9', 'left');
                    $data->orGroupStart()
                        ->where('A.KPPADM_PENGAMPU', session('kppadm'))
                        ->groupEnd();

                } else {
                    return [];
                }

            }
            $data->groupEnd();
        }

        $npwp = $data;

        $data = $db->newQuery()->fromSubquery($npwp, "A")
        // ->join('MFWP B', "A.NPWP = B.NPWP", "left")
            ->join('REF_KPP D', "A.KPPADM_MFWP = D.KD_KPP", "left")
            ->join('KPDL_REF_STATUS_SPT E', "A.STATUS_SPT_TAHUNAN_TERAKHIR = E.ID_STATUS_SPT", "left");

        if ($globalFilter) {
            $columnFilter = ["NAMA_WP", "ALAMAT_MFWP"];
            $data->GroupStart();
            $data->orGroupStart();
            foreach ($columnFilter as $key => $value) {
                $data->orLike("UPPER(" . $value . ")", strtoupper($globalFilter), 'both');
            }
            $data->groupEnd();
            $data->groupEnd();
        }

        if (count($filters)) {
            $data->GroupStart();
            foreach ($filters as $key => $value) {
                if ($value->id == 'NPWP') {
                    $data->like("A.NPWP", strtoupper($value->value), 'both');
                } else {
                    $data->like("UPPER(" . $value->id . ")", strtoupper($value->value), 'both');
                }
            }
            $data->groupEnd();
        }

        if (count($sorting)) {
            foreach ($sorting as $key => $value) {
                if ($value->id == 'NPWP') {
                    $data->orderBy("A.NPWP", $value->desc ? 'desc' : 'asc');
                } else {
                    $data->orderBy($value->id, $value->desc ? 'desc' : 'asc');
                }
            }
        }

        if ($type == 'count') {
            $data = $data->select("count(1) as JML");
            return $data->get();
        }
        if ($type == 'raw') {
            $data = $data->select("A.NPWP, A.NAMA_WP, A.ALAMAT_MFWP, A.KELURAHAN_MFWP, A.KECAMATAN_MFWP, A.KOTA_MFWP, A.PROPINSI_MFWP,
            A.KPPADM_MFWP, A.NAMA_AR_MFWP, A.FLAG_WPS_WPK, A.STATUS_WP_MFWP, A.JNS_WP_MFWP, A.STATUS_SPT_TAHUNAN_TERAKHIR,
            A.TGL_DAFTAR, JUMLAH_PEMBAYARAN_THN_TERAKHIR,  D.NM_KANTOR, E.KETERANGAN");
            // print_r($data->getCompiledSelect());
            // exit;
            return $data->get($size - 1, $start);
        }

    }
}