<?php

namespace App\Controllers\Dashboard;

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

class Cabang extends BaseController
{
    use ResponseTrait;

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

    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');
        
        // Hitung data untuk dashboard
        $jumlah_kegiatan = $this->DashboardModel->countKegiatanPromosi($tahun);
        $jumlah_calon = $this->DashboardModel->countCalonNasabah($tahun);
        $jumlah_closing = $this->DashboardModel->countClosingNasabah($tahun);
        $persentase_konversi = $this->DashboardModel->getPersentaseKonversi($tahun);
        
        // Ambil data bulanan untuk chart
        $data_bulanan = $this->DashboardModel->getDataBulanan($tahun);
        
        // Ambil data jenis promosi untuk pie chart
        $data_jenis_promosi = $this->DashboardModel->getDataJenisPromosi($tahun);
        $data_jenis_promosi_pie = $this->DashboardModel->getDataJenisPromosiPieChart($tahun);
        
        // Ambil data produk diminati untuk horizontal bar chart
        $data_produk_diminati = $this->DashboardModel->getDataProdukDiminati($tahun);
        
        // Ambil data kategori lokasi untuk pie chart dan tabel efektivitas
        $data_kategori_lokasi = $this->DashboardModel->getDataKategoriLokasi($tahun);
        $data_kategori_lokasi_pie = $this->DashboardModel->getDataKategoriLokasiPieChart($tahun);
        
        // Ambil data top 5 karyawan paling efektif
        $data_karyawan_efektif = $this->DashboardModel->getDataKaryawanEfektif($tahun, 5);
        
        return view('dashboard/cabang/cabang_tahun', [
            'title' => 'Summary Cabang',
            'tahun_aktif' => $tahun,
            'jumlah_kegiatan' => $jumlah_kegiatan,
            'jumlah_calon' => $jumlah_calon,
            'jumlah_closing' => $jumlah_closing,
            'persentase_konversi' => $persentase_konversi,
            'data_bulanan' => $data_bulanan,
            'data_jenis_promosi' => $data_jenis_promosi,
            'data_jenis_promosi_pie' => $data_jenis_promosi_pie,
            'data_produk_diminati' => $data_produk_diminati,
            'data_kategori_lokasi' => $data_kategori_lokasi,
            'data_kategori_lokasi_pie' => $data_kategori_lokasi_pie,
            'data_karyawan_efektif' => $data_karyawan_efektif,
            'link_hmap' => base_url('dashboard/cabang/hmap'),
        ]);
    }

    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 hmap()
    {
        // Ambil tahun dari URL parameter jika ada
        $tahun_param = $this->request->getGet('tahun');
        if ($tahun_param && is_numeric($tahun_param) && strlen($tahun_param) == 4) {
            session()->set('tahun_chart', $tahun_param);
        }
        
        // Set tahun default jika belum ada session
        if (!session()->get('tahun_chart')) {
            session()->set('tahun_chart', date('Y'));
        }

        $tahun = session()->get('tahun_chart');
        
        // Ambil data lokasi kantor untuk center map
        $data_kantor = $this->DashboardModel->getDataKantorUser();
        
        // Ambil data lokasi kegiatan dengan efektivitas dan konversi
        $data_lokasi_heatmap = $this->DashboardModel->getDataLokasiHeatmap($tahun);

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

        return view('dashboard/cabang/cabang_hmap', [
            'title' => 'Heatmap Cabang',
            'tahun_aktif' => $tahun,
            'data_kantor' => $data_kantor,
            'data_lokasi_heatmap' => $data_lokasi_heatmap ?: [],
            'link_back' => base_url('dashboard/cabang'),
        ]);
    }
}