<?php

namespace App\Controllers\Dashboard;

use App\Controllers\BaseController;
use CodeIgniter\API\ResponseTrait;

class Pusat extends BaseController
{
    use ResponseTrait;

    public function __construct()
    {
        $this->DashboardModel = model('App\Models\Dashboard\DashpusatModel');
    }

    public function index()
    {
        // Set tahun default jika belum ada session
        if (!session()->get('tahun_chart')) {
            session()->set('tahun_chart', date('Y'));
        }

        $tahun = session()->get('tahun_chart');

        // Get summary data for pusat (all data)
        $summary_data = $this->DashboardModel->getSummaryPusat($tahun);
        
        // Get monthly data for chart
        $data_bulanan = $this->DashboardModel->getDataBulananPusat($tahun);
        
        // Get wilayah offices data
        $data_wilayah = $this->DashboardModel->getDataWilayahPusat($tahun);

        // Get data for heatmap
        $data_kantor = $this->DashboardModel->getDataKantorPusat();
        $data_heatmap_wilayah = $this->DashboardModel->getDataHeatmapWilayah($tahun);

        // Fallback data jika null
        if (!$data_kantor) {
            $data_kantor = (object)[
                'id' => null,
                'satker' => 'Kantor Pusat',
                'lati' => '-6.2088',
                'longi' => '106.8456'
            ];
        }

        return view('dashboard/pusat/pusat_main', [
            'title' => 'Summary Pusat',
            'tahun_aktif' => $tahun,
            'jumlah_kegiatan' => $summary_data['jumlah_kegiatan'],
            'jumlah_calon' => $summary_data['jumlah_calon'],
            'jumlah_closing' => $summary_data['jumlah_closing'],
            'persentase_konversi' => $summary_data['persentase_konversi'],
            'data_bulanan' => $data_bulanan,
            'data_wilayah' => $data_wilayah,
            'data_kantor' => $data_kantor,
            'data_heatmap_wilayah' => $data_heatmap_wilayah ?: [],
            'link_sync' => base_url('dashboard/pusat/sync'),
        ]);
    }

    public function setTahun()
    {
        $tahun = $this->request->getPost('tahun');
        
        if ($tahun && is_numeric($tahun) && strlen($tahun) == 4) {
            session()->set('tahun_chart', $tahun);
            return $this->response->setJSON([
                'status' => 'success',
                'message' => 'Tahun berhasil diupdate',
                'tahun' => $tahun
            ]);
        }
        
        return $this->response->setJSON([
            'status' => 'error',
            'message' => 'Format tahun tidak valid'
        ]);
    }

    public function sync()
    {
        try {
            // Get tahun from session
            $tahun = session()->get('tahun_chart') ?: date('Y');
            
            // Sync all data (pusat level)
            $result = $this->DashboardModel->syncDataPusat($tahun);
            
            return $this->response->setJSON($result);
            
        } catch (\Exception $e) {
            return $this->response->setJSON([
                'status' => 'error',
                'message' => 'Gagal sinkronisasi: ' . $e->getMessage()
            ]);
        }
    }

    public function drillDownWilayah($id_kw)
    {
        // Set tahun default jika belum ada session
        if (!session()->get('tahun_chart')) {
            session()->set('tahun_chart', date('Y'));
        }

        $tahun = session()->get('tahun_chart');
        
        // Validate id_kw
        if (!$id_kw || !is_numeric($id_kw)) {
            throw new \CodeIgniter\Exceptions\PageNotFoundException('Kantor wilayah tidak ditemukan');
        }

        $db = \Config\Database::connect();
        
        // Get kantor wilayah data
        $kantor_wilayah = $db->table('pdk_satker')->where('id', $id_kw)->get()->getRow();
        if (!$kantor_wilayah || $kantor_wilayah->tipe !== 'Wilayah') {
            throw new \CodeIgniter\Exceptions\PageNotFoundException('Kantor wilayah tidak valid');
        }

        // Get data using drill down methods
        $summary_data = $this->DashboardModel->getDataWilayahDrillDown($tahun, $id_kw);
        $data_bulanan = $this->DashboardModel->getDataBulananWilayahDrillDown($tahun, $id_kw);
        $data_area = $this->DashboardModel->getDataAreaWilayahDrillDown($tahun, $id_kw);

        return view('dashboard/pusat/wilayah_drilldown', [
            'title' => 'Detail ' . $kantor_wilayah->satker,
            'kantor_wilayah' => $kantor_wilayah,
            'tahun_aktif' => $tahun,
            'jumlah_kegiatan' => $summary_data['jumlah_kegiatan'],
            'jumlah_calon' => $summary_data['jumlah_calon'],
            'jumlah_closing' => $summary_data['jumlah_closing'],
            'persentase_konversi' => $summary_data['persentase_konversi'],
            'data_bulanan' => $data_bulanan,
            'data_area' => $data_area,
            'link_back' => base_url('dashboard/pusat'),
        ]);
    }
}
