<?php
class Dashboard_tv extends CI_Controller{
	function __construct(){
		parent::__construct();
		
		header("Access-Control-Allow-Origin: *");
        header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE");
        header("Access-Control-Allow-Headers: Content-Type, Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");

        if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
            http_response_code(200);
            exit();
        }
	
		$this->load->model('m_pengguna');
		$this->load->model('m_dashboard');
	}
    
    public function index(){
        $kode=$this->session->userdata('idadmin');
        $x['user']=$this->m_pengguna->get_pengguna_login($kode);
        $this->load->view('admin/v_dashboard_tv', $x);
    }
    
    public function get_api_data()
    {
        // Ambil filter bulan/tahun dari query string
        $bulan = isset($_GET['bulan']) ? (int) $_GET['bulan'] : (int) date('m');
        $tahun = isset($_GET['tahun']) ? (int) $_GET['tahun'] : (int) date('Y');
    
        if ($bulan < 1 || $bulan > 12) {
            $bulan = (int) date('m');
        }
    
        if ($tahun < 2000 || $tahun > 2100) {
            $tahun = (int) date('Y');
        }
    
        $excludedToko = ['00000', 'YOG00', 'YOG09'];
    
        // =========================
        // DATE RANGE
        // =========================
        $now = new DateTimeImmutable('now');
    
        $todayStart = new DateTimeImmutable($now->format('Y-m-d') . ' 00:00:00');
        $todayEnd = $todayStart->modify('+1 day');
        $yesterdayStart = $todayStart->modify('-1 day');
    
        $currentMonthStart = new DateTimeImmutable($now->format('Y-m-01 00:00:00'));
        $currentMonthEnd = $currentMonthStart->modify('+1 month');
        $prevMonthStart = $currentMonthStart->modify('-1 month');
    
        $selectedMonthStart = new DateTimeImmutable(sprintf('%04d-%02d-01 00:00:00', $tahun, $bulan));
        $selectedMonthEnd = $selectedMonthStart->modify('+1 month');
    
        // =========================
        // 1) ACTIVE BRANCHES
        // =========================
        $branches = $this->db->select('kd_toko, nm_toko')
            ->from('tabel_toko')
            ->where('stat', 2)
            ->where_not_in('kd_toko', $excludedToko)
            ->order_by('nm_toko', 'ASC')
            ->get()
            ->result_array();
    
        // =========================
        // 2) DAILY SALES PER BRANCH
        //    (untuk chart bulanan)
        // =========================
        $dailyRows = $this->db->query(
            "
            SELECT 
                DATE(p.tgl_penjualan) AS tgl,
                t.nm_toko,
                SUM(p.netto) AS total
            FROM tabel_penjualan p
            INNER JOIN tabel_toko t ON t.kd_toko = p.kdcabang
            WHERE p.stat != '4'
              AND p.tgl_penjualan >= ?
              AND p.tgl_penjualan < ?
              AND t.stat = 2
              AND t.kd_toko NOT IN ('00000', 'YOG00', 'YOG09')
            GROUP BY DATE(p.tgl_penjualan), t.nm_toko
            ORDER BY t.nm_toko ASC, tgl ASC
            ",
            [
                $selectedMonthStart->format('Y-m-d H:i:s'),
                $selectedMonthEnd->format('Y-m-d H:i:s')
            ]
        )->result_array();
    
        if (
            $bulan === (int) date('m') &&
            $tahun === (int) date('Y')
        ) {
            $maxTgl = (int) date('d');
        } else {
            $maxTgl = cal_days_in_month(CAL_GREGORIAN, $bulan, $tahun);
        }
    
        $dates = range(1, $maxTgl);
        $dataset = [];
        $storeTotals = [];
        $totalOmsetGlobal = 0;
    
        foreach ($branches as $b) {
            $dataset[$b['nm_toko']] = array_fill_keys($dates, 0);
            $storeTotals[$b['nm_toko']] = 0;
        }
    
        foreach ($dailyRows as $row) {
            $tglInt = (int) date('j', strtotime($row['tgl']));
    
            if ($tglInt <= $maxTgl && isset($dataset[$row['nm_toko']])) {
                $val = (float) $row['total'];
                $dataset[$row['nm_toko']][$tglInt] = $val;
                $storeTotals[$row['nm_toko']] += $val;
                $totalOmsetGlobal += $val;
            }
        }
    
        $seriesJsArray = [];
        foreach ($dataset as $nmToko => $dataHarian) {
            $totalTokoFmt = number_format($storeTotals[$nmToko], 0, ',', '.');
            $seriesJsArray[] = [
                'label' => $nmToko . ' (Total: Rp ' . $totalTokoFmt . ')',
                'data'  => array_values($dataHarian)
            ];
        }
    
        // =========================
        // 3) CABANG PERFORMANCE
        //    (hari ini, kemarin, bulan ini, bulan lalu)
        // =========================
        $cabangStats = $this->db->query(
            "
            SELECT 
                t.kd_toko,
                t.nm_toko,
    
                COALESCE(SUM(CASE 
                    WHEN p.tgl_penjualan >= ? AND p.tgl_penjualan < ? THEN p.netto 
                    ELSE 0 
                END), 0) AS omset_harian,
    
                COALESCE(SUM(CASE 
                    WHEN p.tgl_penjualan >= ? AND p.tgl_penjualan < ? THEN p.netto 
                    ELSE 0 
                END), 0) AS omset_kemarin,
    
                COALESCE(SUM(CASE 
                    WHEN p.tgl_penjualan >= ? AND p.tgl_penjualan < ? THEN p.netto 
                    ELSE 0 
                END), 0) AS omset_bulan_ini,
    
                COALESCE(SUM(CASE 
                    WHEN p.tgl_penjualan >= ? AND p.tgl_penjualan < ? THEN p.netto 
                    ELSE 0 
                END), 0) AS omset_bulan_lalu,
    
                COALESCE((
                    SELECT MAX(tg.nilai)
                    FROM tabel_target tg
                    WHERE tg.kdcabang = t.kd_toko
                      AND tg.bulan = ?
                      AND tg.tahun = ?
                      AND tg.jenis = '1'
                ), 0) AS target_nilai
    
            FROM tabel_toko t
            LEFT JOIN tabel_penjualan p 
                ON p.kdcabang = t.kd_toko
               AND p.stat != '4'
               AND p.tgl_penjualan >= ?
               AND p.tgl_penjualan < ?
            WHERE t.kd_toko NOT IN ('00000', 'YOG00', 'YOG09')
              AND t.stat = 2
            GROUP BY t.kd_toko, t.nm_toko
            ORDER BY omset_bulan_ini DESC
            ",
            [
                $todayStart->format('Y-m-d H:i:s'),
                $todayEnd->format('Y-m-d H:i:s'),
    
                $yesterdayStart->format('Y-m-d H:i:s'),
                $todayStart->format('Y-m-d H:i:s'),
    
                $currentMonthStart->format('Y-m-d H:i:s'),
                $currentMonthEnd->format('Y-m-d H:i:s'),
    
                $prevMonthStart->format('Y-m-d H:i:s'),
                $currentMonthStart->format('Y-m-d H:i:s'),
    
                $bulan,
                $tahun,
    
                $prevMonthStart->format('Y-m-d H:i:s'),
                $currentMonthEnd->format('Y-m-d H:i:s')
            ]
        )->result_array();
    
        $gtHarian = 0;
        $gtKemarin = 0;
        $gtBulan = 0;
        $gtLalu = 0;
    
        foreach ($cabangStats as $c) {
            $gtHarian += (float) $c['omset_harian'];
            $gtKemarin += (float) $c['omset_kemarin'];
            $gtBulan += (float) $c['omset_bulan_ini'];
            $gtLalu += (float) $c['omset_bulan_lalu'];
        }
    
        // =========================
        // 4) STATUS HARI INI
        // =========================
        $statusLive = $this->db->query(
            "
            SELECT 
                COALESCE(SUM(CASE WHEN selesai = '1' THEN 1 ELSE 0 END), 0) AS selesai,
                COALESCE(SUM(CASE WHEN selesai = '3' THEN 1 ELSE 0 END), 0) AS pending,
                COALESCE(SUM(CASE WHEN selesai = '0' THEN 1 ELSE 0 END), 0) AS baru,
                COALESCE(SUM(CASE WHEN selesai = '4' THEN 1 ELSE 0 END), 0) AS batal
            FROM tabel_penjualan
            WHERE tgl_penjualan >= ?
              AND tgl_penjualan < ?
            ",
            [
                $todayStart->format('Y-m-d H:i:s'),
                $todayEnd->format('Y-m-d H:i:s')
            ]
        )->row();
    
        // =========================
        // 5) DETAIL STATS COMPARISON
        // =========================
        $qPorsi = $this->db->query(
            "
            SELECT 
                COALESCE(SUM(CASE 
                    WHEN p.tgl_penjualan >= ? AND p.tgl_penjualan < ? THEN rp.jumlah 
                    ELSE 0 
                END), 0) AS today,
                COALESCE(SUM(CASE 
                    WHEN p.tgl_penjualan >= ? AND p.tgl_penjualan < ? THEN rp.jumlah 
                    ELSE 0 
                END), 0) AS yesterday
            FROM tabel_penjualan p
            JOIN tabel_rinci_penjualan rp 
                ON p.no_faktur_penjualan = rp.no_faktur_penjualan
            WHERE p.stat != '4'
              AND p.tgl_penjualan >= ?
              AND p.tgl_penjualan < ?
            ",
            [
                $todayStart->format('Y-m-d H:i:s'),
                $todayEnd->format('Y-m-d H:i:s'),
                $yesterdayStart->format('Y-m-d H:i:s'),
                $todayStart->format('Y-m-d H:i:s'),
                $yesterdayStart->format('Y-m-d H:i:s'),
                $todayEnd->format('Y-m-d H:i:s')
            ]
        )->row_array();
    
        $qTypes = $this->db->query(
            "
            SELECT 
                keter,
                COALESCE(SUM(CASE 
                    WHEN p.tgl_penjualan >= ? AND p.tgl_penjualan < ? THEN 1 
                    ELSE 0 
                END), 0) AS today,
                COALESCE(SUM(CASE 
                    WHEN p.tgl_penjualan >= ? AND p.tgl_penjualan < ? THEN 1 
                    ELSE 0 
                END), 0) AS yesterday
            FROM tabel_penjualan p
            WHERE p.stat != '4'
              AND p.keter != ''
              AND p.tgl_penjualan >= ?
              AND p.tgl_penjualan < ?
            GROUP BY keter
            ",
            [
                $todayStart->format('Y-m-d H:i:s'),
                $todayEnd->format('Y-m-d H:i:s'),
                $yesterdayStart->format('Y-m-d H:i:s'),
                $todayStart->format('Y-m-d H:i:s'),
                $yesterdayStart->format('Y-m-d H:i:s'),
                $todayEnd->format('Y-m-d H:i:s')
            ]
        )->result_array();
    
        $qTotal = $this->db->query(
            "
            SELECT 
                COALESCE(SUM(CASE 
                    WHEN tgl_penjualan >= ? AND tgl_penjualan < ? THEN 1 
                    ELSE 0 
                END), 0) AS today,
                COALESCE(SUM(CASE 
                    WHEN tgl_penjualan >= ? AND tgl_penjualan < ? THEN 1 
                    ELSE 0 
                END), 0) AS yesterday
            FROM tabel_penjualan
            WHERE stat != '4'
              AND tgl_penjualan >= ?
              AND tgl_penjualan < ?
            ",
            [
                $todayStart->format('Y-m-d H:i:s'),
                $todayEnd->format('Y-m-d H:i:s'),
                $yesterdayStart->format('Y-m-d H:i:s'),
                $todayStart->format('Y-m-d H:i:s'),
                $yesterdayStart->format('Y-m-d H:i:s'),
                $todayEnd->format('Y-m-d H:i:s')
            ]
        )->row_array();
    
        $dataReguler = ['today' => 0, 'yesterday' => 0, 'keter' => 'REGULER'];
        $dataOjolList = [];
    
        if (!empty($qTypes)) {
            foreach ($qTypes as $t) {
                if (strtolower($t['keter']) === 'reguler') {
                    $dataReguler = $t;
                } else {
                    $dataOjolList[] = $t;
                }
            }
        }
    
        // =========================
        // MONTH NAME
        // =========================
        $bulanIndo = [
            '01' => 'Januari',  '02' => 'Februari', '03' => 'Maret',
            '04' => 'April',    '05' => 'Mei',      '06' => 'Juni',
            '07' => 'Juli',     '08' => 'Agustus',  '09' => 'September',
            '10' => 'Oktober',  '11' => 'November', '12' => 'Desember'
        ];
    
        $blnIniAngka = date('m');
        $blnLaluAngka = date('m', strtotime('-1 month'));
    
        $response = [
            'sel_bulan' => $bulan,
            'sel_tahun' => $tahun,
            'chart_labels' => array_map('strval', $dates),
            'chart_series' => $seriesJsArray,
            'total_omset_terfilter' => $totalOmsetGlobal,
            'cabang_stats' => $cabangStats,
            'global_stats' => [
                'gt_harian' => $gtHarian,
                'gt_kemarin' => $gtKemarin,
                'gt_bulan' => $gtBulan,
                'gt_lalu' => $gtLalu
            ],
            'status_live' => [
                'selesai' => isset($statusLive->selesai) ? (int) $statusLive->selesai : 0,
                'pending' => isset($statusLive->pending) ? (int) $statusLive->pending : 0,
                'batal'   => isset($statusLive->batal) ? (int) $statusLive->batal : 0,
                'baru'    => isset($statusLive->baru) ? (int) $statusLive->baru : 0
            ],
            'detail_stats' => [
                'reguler' => $dataReguler,
                'ojol'    => $dataOjolList,
                'porsi'   => $qPorsi ?: ['today' => 0, 'yesterday' => 0],
                'total'   => $qTotal ?: ['today' => 0, 'yesterday' => 0]
            ],
            'nama_bln_ini' => $bulanIndo[$blnIniAngka] ?? '',
            'nama_bln_lalu' => $bulanIndo[$blnLaluAngka] ?? '',
            'today_str' => date('d F Y')
        ];
    
        $this->output
            ->set_content_type('application/json')
            ->set_output(json_encode($response, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
    }
    
    // public function get_api_data(){
    //     $bulan = $this->input->get('bulan') ? $this->input->get('bulan') : date('m');
    //     $tahun = $this->input->get('tahun') ? $this->input->get('tahun') : date('Y');
    
    //     $branches = $this->m_dashboard->get_active_branches();
    //     $raw_data = $this->m_dashboard->get_daily_sales_per_branch($bulan, $tahun);
    
    //     if($bulan == date('m') && $tahun == date('Y')){
    //         $max_tgl = (int)date('d');
    //     } else {
    //         $max_tgl = cal_days_in_month(CAL_GREGORIAN, $bulan, $tahun); 
    //     }
    
    //     $dates = range(1, $max_tgl);
    //     $dataset = [];
    //     $store_totals = []; 
    //     $total_omset_global = 0; 
    
    //     foreach($branches as $b){
    //         $dataset[$b['nm_toko']] = array_fill_keys($dates, 0);
    //         $store_totals[$b['nm_toko']] = 0;
    //     }
    
    //     foreach($raw_data as $row){
    //         $tgl_int = (int)$row['tgl'];
            
    //         if($tgl_int <= $max_tgl){
    //             if(isset($dataset[$row['nm_toko']])){
    //                 $val = (float)$row['total'];
    //                 $dataset[$row['nm_toko']][$tgl_int] = $val;
    //                 $total_omset_global += $val;
    //                 $store_totals[$row['nm_toko']] += $val; 
    //             }
    //         }
    //     }
    
    //     $series_js_array = [];
    //     foreach($dataset as $nm_toko => $data_harian){
    //         $total_toko_fmt = number_format($store_totals[$nm_toko], 0, ',', '.');
    //         $label_lengkap = "$nm_toko (Total: Rp $total_toko_fmt)";
    //         $safe_label = str_replace("'", "\'", $label_lengkap);
    //         $data_values = array_values($data_harian);
            
    //         $series_js_array[] = [
    //             'label' => $safe_label,
    //             'data' => $data_values
    //         ];
    //     }
    
    //     $cabang_stats = $this->m_dashboard->get_cabang_performance();
    //     $data_cabang = is_object($cabang_stats) ? $cabang_stats->result_array() : $cabang_stats;
    
    //     $gt_harian = 0; 
    //     $gt_kemarin = 0; 
    //     $gt_bulan = 0; 
    //     $gt_lalu = 0;
    
    //     if(!empty($data_cabang)){
    //         foreach($data_cabang as $c){
    //             $gt_harian  += $c['omset_harian'];
    //             $gt_kemarin += $c['omset_kemarin'];
    //             $gt_bulan   += $c['omset_bulan_ini'];
    //             $gt_lalu    += $c['omset_bulan_lalu'];
    //         }
    //     }
    
    //     $status_live = $this->m_dashboard->get_today_status_stats();
    //     $detail_stats = $this->m_dashboard->get_detailed_stats_comparison();
    
    //     $data_reguler = ['today'=>0, 'yesterday'=>0, 'keter'=>'REGULER'];
    //     $data_ojol_list = [];
    
    //     if(isset($detail_stats['types'])){
    //         foreach($detail_stats['types'] as $t){
    //             if(strtolower($t['keter']) == 'reguler'){
    //                 $data_reguler = $t;
    //             } else {
    //                 $data_ojol_list[] = $t;
    //             }
    //         }
    //     }
    
    //     $bulan_indo = [
    //         '01' => 'Januari', '02' => 'Februari', '03' => 'Maret',
    //         '04' => 'April',   '05' => 'Mei',      '06' => 'Juni',
    //         '07' => 'Juli',    '08' => 'Agustus',  '09' => 'September',
    //         '10' => 'Oktober', '11' => 'November', '12' => 'Desember'
    //     ];
        
    //     $bln_ini_angka  = date('m');
    //     $bln_lalu_angka = date('m', strtotime("-1 month"));
    
    //     $response = [
    //         'sel_bulan' => $bulan,
    //         'sel_tahun' => $tahun,
    //         'chart_labels' => array_map('strval', $dates),
    //         'chart_series' => $series_js_array,
    //         'total_omset_terfilter' => $total_omset_global,
    //         'cabang_stats' => $data_cabang,
    //         'global_stats' => [
    //             'gt_harian' => $gt_harian,
    //             'gt_kemarin' => $gt_kemarin,
    //             'gt_bulan' => $gt_bulan,
    //             'gt_lalu' => $gt_lalu
    //         ],
    //         'status_live' => [
    //             'selesai' => isset($status_live->selesai) ? (int)$status_live->selesai : 0,
    //             'pending' => isset($status_live->pending) ? (int)$status_live->pending : 0,
    //             'batal'   => isset($status_live->batal) ? (int)$status_live->batal : 0,
    //             'baru'    => isset($status_live->baru) ? (int)$status_live->baru : 0
    //         ],
    //         'detail_stats' => [
    //             'reguler' => $data_reguler,
    //             'ojol' => $data_ojol_list,
    //             'porsi' => $detail_stats['porsi'] ?? ['today'=>0, 'yesterday'=>0],
    //             'total' => $detail_stats['total'] ?? ['today'=>0, 'yesterday'=>0]
    //         ],
    //         'nama_bln_ini' => $bulan_indo[$bln_ini_angka] ?? '',
    //         'nama_bln_lalu' => $bulan_indo[$bln_lalu_angka] ?? '',
    //         'today_str' => date('d F Y')
    //     ];
    
    //     $this->output
    //          ->set_content_type('application/json')
    //          ->set_output(json_encode($response));
    // }
    
    // Function untuk AJAX Request (Auto Update)
    function get_live_data(){
        $odr_today = $this->m_dashboard->get_today_orders_all_branches();
        $html_order_list = '';
        if($odr_today->num_rows() > 0){
            foreach($odr_today->result() as $o){
                $color = '#'.substr(md5($o->kdcabang), 0, 6);
                
                // Logic Status
                $st_cls = "st-3"; $st_txt = "Proses"; $badge_style=""; $alasan="";
                if($o->selesai == '1') { $st_cls = "st-1"; $st_txt = "Selesai"; }
                elseif($o->selesai == '0') { $st_cls = "st-3"; $st_txt = "Baru"; $badge_style="background:#4e73df; color:#fff;"; }
                elseif($o->selesai == '4') { $st_cls = "st-4"; $st_txt = "Batal"; $alasan='<div style="font-size:10px; color:#e74a3b;">"'.$o->keter.'"</div>'; }
                elseif($o->selesai == '3') { $st_cls = "st-3"; $st_txt = "Proses"; } // Pending

                $jam = !empty($o->tglbayar) ? date('H:i', strtotime($o->tglbayar)) : date('H:i', strtotime($o->waktu));
                $pelanggan = !empty($o->npelanggan) ? $o->npelanggan : 'Umum';
                $rp = number_format($o->netto, 0, ',', '.');
                
                // Susun HTML Item
                $html_order_list .= '
                <div class="order-item '.$st_cls.'" style="display:block; padding: 12px;">
                    <div style="display:flex; justify-content:space-between; align-items:center; margin-bottom:5px;">
                        <span style="font-size:0.75rem; color:#aaa; font-weight:600;">#'.$o->no_faktur_penjualan.'</span>
                        <span style="font-size:0.7rem; background:'.$color.'; color:#fff; padding:2px 8px; border-radius:10px;">'.$o->nm_toko.'</span>
                    </div>
                    <div style="margin-bottom:5px;">
                        <span style="font-size:1rem; font-weight:700; color:#4e73df; display:block; line-height:1.2;">'.$pelanggan.'</span>
                    </div>
                    <div style="display:flex; justify-content:space-between; align-items:start; border-top:1px dashed #eee; padding-top:8px; margin-top:5px;">
                        <div style="font-size:0.75rem; color:#666;">
                             '.($o->selesai!='4' ? '<div style="margin-bottom:2px;"><i class="fa fa-tag text-primary"></i> '.$o->keter.'</div>' : '').'
                             <div><i class="fa fa-clock-o text-warning"></i> '.$jam.'</div>
                        </div>
                        <div style="text-align:right;">
                            <span style="font-size:1rem; font-weight:700; color:#333; display:block;">Rp '.$rp.'</span>
                            <div style="margin-top:5px;">
                                <span class="badge-mini" style="font-size:0.65rem; '.$badge_style.'">'.$st_txt.'</span>
                                <button class="btn btn-xs btn-default" onclick="showDetail(\''.$o->no_faktur_penjualan.'\')" title="Lihat Rincian" style="padding:0px 5px; margin-left:3px; border-radius:3px;">
                                    <i class="fa fa-eye text-primary"></i>
                                </button>
                            </div>
                            '.$alasan.'
                        </div>
                    </div>
                </div>';
            }
        } else {
            $html_order_list = '<div style="text-align:center; padding:50px 0; color:#ccc;"><i class="fa fa-inbox fa-3x" style="opacity:0.3"></i><br><span style="font-size:13px;">Belum ada order hari ini</span></div>';
        }

        // 2. DATA PIE CHART (Status)
        $status_live = $this->m_dashboard->get_today_status_stats();

        // 3. DATA STATISTIK DETAIL (Porsi, Struk, Ojol)
        $detail_stats = $this->m_dashboard->get_detailed_stats_comparison();
        
        // Format Ojol
        $ojol_data = [];
        if(isset($detail_stats['types'])){
            foreach($detail_stats['types'] as $t){
                if(strtolower($t['keter']) != 'reguler'){
                    $ojol_data[str_replace(' ','_',strtoupper($t['keter']))] = number_format($t['today']);
                }
            }
        }
        $reg_today = 0;
        foreach($detail_stats['types'] as $t) { if(strtolower($t['keter']) == 'reguler') $reg_today = $t['today']; }

        $cabang_stats = $this->m_dashboard->get_cabang_performance();
        $cabang_data = [];
        
        $gt_harian = 0; $gt_kemarin = 0; $gt_bulan = 0; $gt_lalu = 0;

        // PERBAIKAN: Gunakan as $c (karena model get_cabang_performance sekarang me-return array)
        foreach($cabang_stats as $c){
            $gt_harian  += $c['omset_harian'];
            $gt_kemarin += $c['omset_kemarin'];
            $gt_bulan   += $c['omset_bulan_ini'];
            $gt_lalu    += $c['omset_bulan_lalu'];

            $diff = $c['omset_harian'] - $c['omset_kemarin'];
            $pct = 0; $icon = 'fa-minus'; $cls = 'text-muted';
            if($c['omset_kemarin'] > 0) $pct = round(($diff / $c['omset_kemarin']) * 100, 1);
            elseif($c['omset_harian'] > 0) $pct = 100;
            
            if($pct > 0) { $icon='fa-caret-up'; $cls='text-success'; }
            if($pct < 0) { $icon='fa-caret-down'; $cls='text-danger'; }

            $cabang_data[] = [
                'kd_toko' => $c['kd_toko'],
                'omset_harian' => number_format($c['omset_harian'], 0, ',', '.'),
                'omset_bulan' => number_format($c['omset_bulan_ini']/1000000, 1) . ' Jt',
                'omset_bulan_ini_raw' => $c['omset_bulan_ini'], // TAMBAHAN UNTUK CHART LIVE
                'pct_html' => '<i class="fa '.$icon.'"></i> '.abs($pct).'%',
                'pct_class' => $cls
            ];
        }
        
       
        // Hitung Persentase Global Harian
        $g_diff = $gt_harian - $gt_kemarin;
        $g_pct = 0; $g_icon = 'fa-minus'; $g_cls = 'text-muted';
        if($gt_kemarin > 0) $g_pct = round(($g_diff / $gt_kemarin) * 100, 1);
        elseif($gt_harian > 0) $g_pct = 100;
        
        if($g_pct > 0) { $g_icon='fa-caret-up'; $g_cls='text-success'; }
        if($g_pct < 0) { $g_icon='fa-caret-down'; $g_cls='text-danger'; }

        // OUTPUT JSON
        header('Content-Type: application/json');
        echo json_encode([
            'order_list_html' => $html_order_list,
            'chart_status' => [
                'selesai' => (int)$status_live->selesai,
                'pending' => (int)$status_live->pending,
                'baru'    => (int)$status_live->baru,
                'batal'   => (int)$status_live->batal
            ],
            'stats_detail' => [
                'porsi'   => number_format($detail_stats['porsi']['today']),
                'reguler' => number_format($reg_today),
                'struk'   => number_format($detail_stats['total']['today']),
                'ojol'    => $ojol_data
            ],
            'cabang_data' => $cabang_data,
            'global_data' => [
                'harian' => number_format($gt_harian, 0, ',', '.'),
                'bulan'  => number_format($gt_bulan/1000000, 1) . ' Jt',
                'pct_html' => '<i class="fa '.$g_icon.'"></i> '.abs($g_pct).'% <span style="color:#aaa; font-weight:400;">vs kmrn</span>',
                'pct_class' => $g_cls
            ],
            'top_mie_html'    => $html_top_mie
        ]);
    }
    
    // Function untuk AJAX Filter Statistik Penjualan
    function get_statistik_penjualan_ajax(){
        $bulan = $this->input->get('bulan') ? $this->input->get('bulan') : date('m');
        $tahun = $this->input->get('tahun') ? $this->input->get('tahun') : date('Y');
        
        $branches = $this->m_dashboard->get_active_branches();
        $raw_data = $this->m_dashboard->get_daily_sales_per_branch($bulan, $tahun);
        
        if($bulan == date('m') && $tahun == date('Y')){
            $max_tgl = (int)date('d'); // Sampai hari ini saja
        } else {
            $max_tgl = cal_days_in_month(CAL_GREGORIAN, $bulan, $tahun); 
        }

        $dates = range(1, $max_tgl);
        
        $dataset = [];
        $store_totals = []; 
        $total_omset_global = 0; 

        // Siapkan kerangka data
        foreach($branches as $b){
            $dataset[$b['nm_toko']] = array_fill_keys($dates, 0);
            $store_totals[$b['nm_toko']] = 0;
        }
        
        // Isi dengan data dari database
        foreach($raw_data as $row){
            $tgl_int = (int)$row['tgl'];
            
            if($tgl_int <= $max_tgl){
                if(isset($dataset[$row['nm_toko']])){
                    $val = (float)$row['total'];
                    $dataset[$row['nm_toko']][$tgl_int] = $val;
                    $total_omset_global += $val;
                    $store_totals[$row['nm_toko']] += $val; 
                }
            }
        }
        
        // 1. Susun string JSON untuk chart_labels
        $labels_json = '["' . implode('","', $dates) . '"]';
        
        // 2. Susun string JSON untuk chart_series
        $series_js_array = [];
        foreach($dataset as $nm_toko => $data_harian){
            $total_toko_fmt = number_format($store_totals[$nm_toko], 0, ',', '.');
            $label_lengkap = "$nm_toko (Total: Rp $total_toko_fmt)";
            
            // Ganti tanda kutip ganda jadi escape agar JSON tidak rusak
            $safe_label = str_replace('"', '\"', $label_lengkap);
            $data_values = implode(',', array_values($data_harian));
            
            // Wajib pakai kutip ganda ("") untuk Key dan String agar menjadi JSON yang valid
            $series_js_array[] = '{"label": "'.$safe_label.'", "data": ['.$data_values.']}';
        }
        $series_json = '[' . implode(',', $series_js_array) . ']';
        
        $total_omset_fmt = number_format($total_omset_global, 0, ',', '.');
        
        // 3. Rangkai semuanya menjadi satu String berformat JSON
        $json_string = '{';
        $json_string .= '"total_omset_terfilter": "' . $total_omset_fmt . '",';
        $json_string .= '"chart_labels": ' . $labels_json . ',';
        $json_string .= '"chart_series": ' . $series_json;
        $json_string .= '}';
        
        // Kirimkan ke browser
        header('Content-Type: application/json');
        echo $json_string;
    }
}