<?php
class Dashboard extends CI_Controller{
	function __construct(){
		parent::__construct();
		if($this->session->userdata('masuk') !=TRUE){
            $url=base_url('administrator');
            redirect($url);
        };
		$this->load->model('m_pengguna');
		$this->load->model('m_pelanggan');
		$this->load->model('m_order');
		$this->load->model('m_dashboard');
	}

	function index(){
        $kode=$this->session->userdata('idadmin');
        $x['user']=$this->m_pengguna->get_pengguna_login($kode);
        
        $bulan = $this->input->get('bulan') ? $this->input->get('bulan') : date('m');
        $tahun = $this->input->get('tahun') ? $this->input->get('tahun') : date('Y');
        
        $x['sel_bulan'] = $bulan;
        $x['sel_tahun'] = $tahun;
        
        $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);
        
        $x['chart_labels'] = '["' . implode('","', $dates) . '"]'; 

        $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; 
                }
            }
        }
        
        $x['total_omset_terfilter'] = $total_omset_global;

        $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 = implode(',', array_values($data_harian));
            
            $series_js_array[] = "{ label: '$safe_label', data: [$data_values] }";
        }
        
        $x['chart_series'] = "[" . implode(',', $series_js_array) . "]"; 
        
        $x['detail_stats'] = $this->m_dashboard->get_detailed_stats_comparison();
        
        $x['cabang_stats']   = $this->m_dashboard->get_cabang_performance();
        $x['odr_today']      = $this->m_dashboard->get_today_orders_all_branches();
        $x['status_live']    = $this->m_dashboard->get_today_status_stats();
        $x['summary_global'] = $this->m_dashboard->get_global_monthly_summary();
        $x['top_mie']        = $this->m_dashboard->get_top_selling_mie();
        
        // maps
        $this->db->select('nm_toko, almt_toko, lat, lng');
        $this->db->from('tabel_toko');
        $this->db->where('stat', 2);        
        $this->db->where("lat != ''");       
        $this->db->where("lng != ''");       
        $x['data_peta_toko'] = $this->db->get()->result_array();
        
        
        $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"));
        
        $x['nama_bln_ini']  = isset($bulan_indo[$bln_ini_angka]) ? $bulan_indo[$bln_ini_angka] : '';
        $x['nama_bln_lalu'] = isset($bulan_indo[$bln_lalu_angka]) ? $bulan_indo[$bln_lalu_angka] : '';
        
        $this->load->view('admin/v_dashboard',$x);
    }
    
    function get_order_detail_ajax(){
        $no_faktur = $this->input->post('no_faktur');
        
        if(empty($no_faktur)){
            echo json_encode(['status' => false, 'message' => 'No Faktur tidak ditemukan']);
            return;
        }

        $header = $this->m_dashboard->get_order_header($no_faktur);
        $items  = $this->m_dashboard->get_order_items($no_faktur);

        echo json_encode([
            'status' => true,
            'header' => $header,
            'items'  => $items
        ]);
    }
    
    // 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;

        foreach($cabang_stats->result() 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',
                'pct_html' => '<i class="fa '.$icon.'"></i> '.abs($pct).'%',
                'pct_class' => $cls
            ];
        }
        
        // 5. DATA TOP MIE TERLARIS (HTML)
        $top_mie_data = $this->m_dashboard->get_top_selling_mie();
        $html_top_mie = '';
        
        if(!empty($top_mie_data)){
            $no = 1;
            foreach($top_mie_data as $m){
                $width = ($m['qty'] > 100) ? 100 : $m['qty']; 
                
                $html_top_mie .= '
                <div style="margin-bottom:12px;">
                    <div style="display:flex; justify-content:space-between; font-size:0.8rem; margin-bottom:2px;">
                        <span style="font-weight:600; color:#5a5c69;">'.$no.'. '.$m['nm_barang'].'</span>
                        <span style="font-weight:700; color:#4e73df;">'.$m['qty'].' Porsi</span>
                    </div>
                    <div style="background:#eaecf4; height:6px; border-radius:3px; overflow:hidden;">
                        <div style="background:#4e73df; height:100%; width:'.$width.'%;"></div>
                    </div>
                </div>';
                $no++;
            }
        } else {
            $html_top_mie = '<div style="text-align:center; padding:20px; color:#ccc; font-size:0.8rem;">Belum ada penjualan mie hari ini</div>';
        }

        // 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 get_detail_ajax(){
        $no_faktur = $this->input->post('no_faktur');
        $data = $this->m_dashboard->get_order_detail($no_faktur);
        $waktu = date('d F Y H:i', strtotime($data['header']['waktu']));
        $netto = number_format($data['header']['netto'], 0, ',', '.');
        $pelanggan = !empty($data['header']['npelanggan']) ? str_replace('"', '', $data['header']['npelanggan']) : 'Umum';
        $nm_toko = str_replace('"', '', $data['header']['nm_toko']);
        $selesai = $data['header']['selesai'];
        $keter   = str_replace(array("\r", "\n", '"'), '', $data['header']['keter']); 

        $json_header = ' "header": { ';
        $json_header .= '"waktu_formatted": "'.$waktu.'", ';
        $json_header .= '"netto_formatted": "'.$netto.'", ';
        $json_header .= '"npelanggan": "'.$pelanggan.'", ';
        $json_header .= '"nm_toko": "'.$nm_toko.'", ';
        $json_header .= '"selesai": "'.$selesai.'", ';
        $json_header .= '"keter": "'.$keter.'" ';
        $json_header .= '}, ';

        $items_array = array();
        foreach($data['items'] as $item){
            $nm_barang = str_replace('"', '', $item['nm_barang']); // Hapus kutip di nama barang
            $subtotal  = number_format($item['sub_total_jual'], 0, ',', '.');
            $jumlah    = $item['jumlah'];
            $note      = isset($item['note']) ? str_replace(array("\r", "\n", '"'), '', $item['note']) : '';

            $str_item  = '{';
            $str_item .= '"nm_barang": "'.$nm_barang.'", ';
            $str_item .= '"jumlah": "'.$jumlah.'", ';
            $str_item .= '"subtotal_formatted": "'.$subtotal.'", ';
            $str_item .= '"note": "'.$note.'"';
            $str_item .= '}';
            
            $items_array[] = $str_item;
        }
        
        $json_items = '"items": [' . implode(',', $items_array) . ']';
        $output_json = '{' . $json_header . $json_items . '}';

        header('Content-Type: application/json');
        echo $output_json;
    }
}