<?php

class KorsupgahAreaFokusPenanggungJawabController extends BaseController
{
    public function setAreafokusForJabatan($idjabatan)
    {
        $this->checkScopes(['korsupgah.admin']);

        $rawBody = $this->request->getJsonRawBody(true);

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

        $arrIdAreaFokus = json_decode($params['id_area_fokus']);
        sort($arrIdAreaFokus);
        $string_array_id = implode(", ", $arrIdAreaFokus);

        $existingAreaFokusJabatan = KorsupgahAreaFokusPenanggungJawab::find([
            'conditions' => 'id_jabatan = ?0',
            'bind' => [
                $idjabatan
            ]
        ]);

        foreach ($existingAreaFokusJabatan as $item) {
            $item->delete();
        }

        $lastSavedData = null;
        foreach ($arrIdAreaFokus as $id) {
            $data = new KorsupgahAreaFokusPenanggungJawab();
            $data->id_area_fokus = $id;
            $data->id_jabatan = $idjabatan;
            $data->save();
            $lastSavedData = $data;
        }

        return new CollectionPaginatedResponse([$lastSavedData]);
    }

    public function setJabatanForAreaFokus($idareafokus)
    {
        $this->checkScopes(['korsupgah.admin']);

        $rawBody = $this->request->getJsonRawBody(true);

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

        $arrIdJabatan = json_decode($params['id_jabatan']);

        $existingAreaFokusJabatan = KorsupgahAreaFokusPenanggungJawab::find([
            'conditions' => 'id_area_fokus = ?0',
            'bind' => [
                $idareafokus
            ]
        ]);

        foreach ($existingAreaFokusJabatan as $item) {
            $item->delete();
        }

        $lastSavedData = null;
        foreach ($arrIdJabatan as $id) {
            $data = new KorsupgahAreaFokusPenanggungJawab();
            $data->id_area_fokus = $idareafokus;
            $data->id_jabatan = $id;
            $data->save();
            $lastSavedData = $data;
        }

        return new CollectionPaginatedResponse([$lastSavedData]);
    }

    public function listJabatan($idareafokus)
    {
        $this->checkIsAuthenticated();

        $jabatanIds = array_column(
            KorsupgahAreaFokusPenanggungJawab::find([
                'conditions' => 'id_area_fokus = ?0',
                'bind' => [
                    $idareafokus
                ]
            ])->toArray()
        , 'id_jabatan');

        $result = [];

        if(count($jabatanIds) > 0) {
            $result = Jabatan::find([
                'conditions' => 'id IN ({id_jabatan:array})',
                'bind' => [
                    'id_jabatan' => array_values($jabatanIds)
                ]
            ]);
        }

        return new CollectionPaginatedResponse($result);
    }

    public function listAreaFokus($idjabatan)
    {
        $this->checkIsAuthenticated();

        $areaFokusIds = array_column(
            KorsupgahAreaFokusPenanggungJawab::find([
                'conditions' => 'id_jabatan = ?0',
                'bind' => [
                    $idjabatan
                ]
            ])->toArray()
        , 'id_area_fokus');

        $result = [];

        if(count($areaFokusIds) > 0) {
            $result = KorsupgahAreaFokus::find([
                'conditions' => 'id IN ({id_area_fokus:array})',
                'bind' => [
                    'id_area_fokus' => array_values($areaFokusIds)
                ]
            ]);
        }

        return new CollectionPaginatedResponse($result);
    }
}