<?php

namespace App\Controllers\admin;

use App\Controllers\BaseController;
use App\Models\HomeSettingModel;
use App\Models\HomeSliderModel;
use App\Models\HomeProductModel;
use App\Models\AdminMenuModel;


class AdminContent extends BaseController
{

    public function index()
    {
        // Cek apakah user sudah login
        if (!session()->get('isLoggedIn')) {
            return redirect()->to('/admin');
        }

        $settingModel = new \App\Models\HomeSettingModel();
        
        // 1. Hitung Total Pelamar
        $appRaw = $settingModel->where('key_name', 'applicant_list')->first();
        $appList = $appRaw ? json_decode($appRaw['value_text'], true) : [];
        if (!is_array($appList)) $appList = [];
        $totalPelamar = count($appList);

        // 2. Hitung Total Pengumuman
        $pengumumanRaw = $settingModel->where('key_name', 'pengumuman_list')->first();
        $pengumumanList = $pengumumanRaw ? json_decode($pengumumanRaw['value_text'], true) : [];
        if (!is_array($pengumumanList)) $pengumumanList = [];
        $totalPengumuman = count($pengumumanList);

        // 3. Hitung Total Menu dari Database POS
        $dbPos = \Config\Database::connect('posDB');
        $totalMenu = $dbPos->table('tabel_menu')->countAllResults();

        // 4. Hitung Total Galeri
        $galeriRaw = $settingModel->where('key_name', 'galeri_list')->first();
        $galeriList = $galeriRaw ? json_decode($galeriRaw['value_text'], true) : [];
        if (!is_array($galeriList)) $galeriList = [];
        $totalGaleri = count($galeriList);

        // 5. Hitung Total Cabang (Kedai)
        $tokoModel = new \App\Models\TokoModel();
        $list_toko = $tokoModel->where('stat', 2)->where('kd_toko !=', 'YOG09')->findAll();
        if (empty($list_toko)) {
            $list_toko = $tokoModel->findAll();
        }
        $totalCabang = count($list_toko);

        // 6. Kirim Data ke View
        $data = [
            'title'           => 'Dashboard Admin - Mie Nyinyir',
            'totalPelamar'    => $totalPelamar,
            'totalPengumuman' => $totalPengumuman,
            'totalMenu'       => $totalMenu,
            'totalGaleri'     => $totalGaleri,
            'totalCabang'     => $totalCabang
        ];

        return view('admin-web/dashboard-adm', $data); 
    }

    public function home()
    {
        if (!session()->get('isLoggedIn'))
            return redirect()->to('/admin');

        // 1. Ambil data settings
        $settingModel = new HomeSettingModel();
        $settingsRaw = $settingModel->findAll();
        $settings = [];
        foreach ($settingsRaw as $s) {
            $settings[$s['key_name']] = $s['value_text'];
        }

        // 2. Kirim data ke View
        $data = [
            'title' => 'Kelola Home - Admin Mie Nyinyir',
            'settings' => $settings,
            'sliders' => (new HomeSliderModel())->findAll(),
            'products' => (new HomeProductModel())->findAll()
        ];

        return view('admin-web/home-setting', $data);
    }

    // --- FUNGSI BANTUAN UNTUK SETTINGS (Mencegah Error Jika Data Kosong) ---
    private function saveSetting($key, $value)
    {
        $settingModel = new HomeSettingModel();
        $cek = $settingModel->where('key_name', $key)->first();

        if ($cek) {
            // Jika sudah ada, Update
            $settingModel->where('key_name', $key)->set(['value_text' => $value])->update();
        } else {
            // Jika belum ada, Insert
            $settingModel->insert([
                'key_name' => $key,
                'value_text' => $value
            ]);
        }
    }

    // --- PROSES CRUD TAB 1 (SETTINGS HERO & ABOUT) ---
    public function updateSettings()
    {
        // Simpan atau update teks menggunakan fungsi bantuan
        $this->saveSetting('about_title', $this->request->getPost('about_title'));
        $this->saveSetting('about_text', $this->request->getPost('about_text'));

        // Cek jika ada upload gambar hero baru
        $fileImage = $this->request->getFile('hero_image');
        if ($fileImage && $fileImage->isValid() && !$fileImage->hasMoved()) {
            $newName = $fileImage->getRandomName();
            $fileImage->move('uploads/home/', $newName);
            $imagePath = 'uploads/home/' . $newName;

            // Simpan path gambar ke database
            $this->saveSetting('hero_image', $imagePath);
        }

        session()->setFlashdata('success', 'Teks About dan Hero berhasil diperbarui!');
        return redirect()->to('/dashboard-adm/home');
    }

    // --- PROSES CRUD TAB SLIDER ---
    public function addSlider()
    {
        $fileImage = $this->request->getFile('slider_image');
        if ($fileImage && $fileImage->isValid() && !$fileImage->hasMoved()) {
            $newName = $fileImage->getRandomName();
            $fileImage->move('assets/img/gb_others/', $newName);

            (new HomeSliderModel())->insert(['image' => 'assets/img/gb_others/' . $newName]);
            session()->setFlashdata('success', 'Gambar Slider berhasil ditambahkan!');
        } else {
            session()->setFlashdata('error', 'Gagal upload gambar slider.');
        }
        return redirect()->to('/dashboard-adm/home');
    }

    public function deleteSlider($id)
    {
        $sliderModel = new HomeSliderModel();
        $slider = $sliderModel->find($id);

        // Hapus file fisik jika ada
        if ($slider && !empty($slider['image']) && file_exists($slider['image'])) {
            unlink($slider['image']);
        }

        $sliderModel->delete($id);
        session()->setFlashdata('success', 'Gambar Slider berhasil dihapus!');
        return redirect()->to('/dashboard-adm/home');
    }

    // --- PROSES CRUD TAB PRODUK / HIGHLIGHT ---
    public function addProduct()
    {
        $fileImage = $this->request->getFile('product_image');
        $imagePath = '';

        if ($fileImage && $fileImage->isValid() && !$fileImage->hasMoved()) {
            $newName = $fileImage->getRandomName();
            $fileImage->move('uploads/home/products/', $newName);
            $imagePath = 'uploads/home/products/' . $newName;
        }

        $data = [
            'name' => $this->request->getPost('name'),
            'subtitle' => $this->request->getPost('subtitle'),
            'description' => $this->request->getPost('description'),
            'ingredients' => $this->request->getPost('ingredients'),
            'kategori_rasa' => $this->request->getPost('kategori_rasa'),
            'image' => $imagePath
        ];

        (new HomeProductModel())->insert($data);
        session()->setFlashdata('success', 'Highlight Mie berhasil ditambahkan!');
        return redirect()->to('/dashboard-adm/home');
    }

    public function deleteProduct($id)
    {
        $productModel = new HomeProductModel();
        $product = $productModel->find($id);

        // Hapus file fisik gambar jika ada
        if ($product && !empty($product['image']) && file_exists($product['image'])) {
            unlink($product['image']);
        }

        $productModel->delete($id);
        session()->setFlashdata('success', 'Highlight Mie berhasil dihapus!');
        return redirect()->to('/dashboard-adm/home');
    }

    public function updateProduct($id)
    {
        $productModel = new HomeProductModel();
        $oldProduct = $productModel->find($id);

        if (!$oldProduct) {
            session()->setFlashdata('error', 'Produk tidak ditemukan!');
            return redirect()->to('/dashboard-adm/home');
        }

        $data = [
            'name' => $this->request->getPost('name'),
            'subtitle' => $this->request->getPost('subtitle'),
            'description' => $this->request->getPost('description'),
            'ingredients' => $this->request->getPost('ingredients'),
            'kategori_rasa' => $this->request->getPost('kategori_rasa'),
        ];

        // Cek jika ada upload gambar baru
        $fileImage = $this->request->getFile('product_image');
        if ($fileImage && $fileImage->isValid() && !$fileImage->hasMoved()) {
            // Hapus gambar lama agar storage tidak penuh
            if (!empty($oldProduct['image']) && file_exists($oldProduct['image'])) {
                unlink($oldProduct['image']);
            }

            // Upload gambar baru
            $newName = $fileImage->getRandomName();
            $fileImage->move('uploads/home/products/', $newName);
            $data['image'] = 'uploads/home/products/' . $newName;
        }

        $productModel->update($id, $data);
        session()->setFlashdata('success', 'Highlight Mie berhasil diperbarui!');
        return redirect()->to('/dashboard-adm/home');
    }

    // public function menu()
    // {
    //     if (!session()->get('isLoggedIn'))
    //         return redirect()->to('/admin');

    //     $settingModel = new HomeSettingModel();
    //     $adminMenuModel = new AdminMenuModel();

    //     $hiddenSetting = $settingModel->where('key_name', 'hidden_menus')->first();
    //     $hiddenMenus = $hiddenSetting ? json_decode($hiddenSetting['value_text'], true) : [];
    //     if (!is_array($hiddenMenus))
    //         $hiddenMenus = [];

    //     $data = [
    //         'title' => 'Kelola Menu - Admin',
    //         'menuData' => $adminMenuModel->getAllMenuDataAdmin(), // <-- Panggil fungsinya
    //         'hiddenMenus' => $hiddenMenus
    //     ];

    //     return view('admin-web/menu-setting', $data);
    // }

    // public function toggleMenuVisibility()
    // {
    //     if (!session()->get('isLoggedIn')) {
    //         return $this->response->setJSON(['success' => false, 'message' => 'Unauthorized']);
    //     }

    //     $settingModel = new HomeSettingModel();

    //     // PERBAIKAN: Tangkap 'kode_menu', bukan 'kdmenu'
    //     $kdmenu = $this->request->getPost('kode_menu');
    //     $isVisible = $this->request->getPost('is_visible');

    //     $hiddenSetting = $settingModel->where('key_name', 'hidden_menus')->first();
    //     $hiddenMenus = $hiddenSetting ? json_decode($hiddenSetting['value_text'], true) : [];
    //     if (!is_array($hiddenMenus))
    //         $hiddenMenus = [];

    //     // Validasi tambahan untuk memastikan $kdmenu tidak kosong
    //     if (!$kdmenu) {
    //         return $this->response->setJSON(['success' => false, 'message' => 'Kode menu tidak valid']);
    //     }

    //     if ($isVisible == '0') {
    //         if (!in_array($kdmenu, $hiddenMenus))
    //             $hiddenMenus[] = $kdmenu;
    //     } else {
    //         $hiddenMenus = array_filter($hiddenMenus, function ($item) use ($kdmenu) {
    //             return $item !== $kdmenu;
    //         });
    //         $hiddenMenus = array_values($hiddenMenus);
    //     }

    //     $newValue = json_encode($hiddenMenus);

    //     if ($hiddenSetting) {
    //         $settingModel->where('key_name', 'hidden_menus')->set(['value_text' => $newValue])->update();
    //     } else {
    //         $settingModel->insert(['key_name' => 'hidden_menus', 'value_text' => $newValue]);
    //     }

    //     return $this->response->setJSON(['success' => true]);
    // }

    // public function updateWebInfo()
    // {
    //     // Validasi Permintaan AJAX
    //     if (!$this->request->isAJAX()) {
    //         return $this->response->setJSON(['success' => false, 'message' => 'Direct access not allowed']);
    //     }

    //     // KONEKSI LANGSUNG KE posDB dan tabel_menu
    //     $db = \Config\Database::connect('posDB');
    //     $builder = $db->table('tabel_menu');

    //     // Ambil inputan dari JS
    //     $kodeMenu = $this->request->getPost('kode_menu');
    //     $namaMenu = $this->request->getPost('nama_menu');

    //     // 1. Validasi Input Teks (Sederhana agar tidak bentrok dengan file upload)
    //     if (empty($kodeMenu) || empty($namaMenu)) {
    //         return $this->response->setJSON([
    //             'success' => false,
    //             'message' => 'Kode atau Nama Menu tidak boleh kosong.'
    //         ]);
    //     }

    //     // Cek apakah data menu ada di database
    //     $currentMenu = $builder->where('kode_menu', $kodeMenu)->get()->getRowArray();
        
    //     if (!$currentMenu) {
    //         return $this->response->setJSON(['success' => false, 'message' => 'Data menu tidak ditemukan di database.']);
    //     }

    //     // Persiapkan data untuk di-update
    //     $dataToUpdate = [
    //         'nama_menu' => $namaMenu,
    //     ];

    //     // 2. Handle Upload Gambar (Jika User Memilih Gambar Baru)
    //     $fileFoto = $this->request->getFile('foto');
    //     $newFotoName = null;

    //     // Cek apakah ada file yang diupload dan tidak ada error
    //     if ($fileFoto && $fileFoto->isValid() && !$fileFoto->hasMoved()) {
            
    //         // Generate nama file random agar tidak ada yang bentrok
    //         $newFotoName = $fileFoto->getRandomName();

    //         // Pindahkan gambar ke folder public/uploads/menu
    //         // PASTIKAN FOLDER INI SUDAH ADA!
    //         if ($fileFoto->move(FCPATH . 'uploads/menu', $newFotoName)) {
    //             $dataToUpdate['foto'] = $newFotoName;

    //             // Hapus foto lama jika ada, agar hardisk tidak penuh
    //             if (!empty($currentMenu['foto']) && file_exists(FCPATH . 'uploads/menu/' . $currentMenu['foto'])) {
    //                 unlink(FCPATH . 'uploads/menu/' . $currentMenu['foto']);
    //             }
    //         } else {
    //             return $this->response->setJSON(['success' => false, 'message' => 'Gagal memindahkan file gambar.']);
    //         }
    //     }

    //     // 3. Eksekusi Update ke Database
    //     try {
    //         // Lakukan proses UPDATE berdasarkan kode_menu
    //         $updateStatus = $builder->where('kode_menu', $kodeMenu)->update($dataToUpdate);
            
    //         if ($updateStatus) {
    //             return $this->response->setJSON([
    //                 'success' => true,
    //                 'message' => 'Data menu berhasil diperbarui.',
    //                 'new_foto' => $newFotoName // Kirim nama file baru ke JS agar gambar langsung berubah
    //             ]);
    //         } else {
    //             return $this->response->setJSON(['success' => false, 'message' => 'Gagal menyimpan ke database.']);
    //         }
    //     } catch (\Exception $e) {
    //         // Tangkap jika terjadi error database
    //         log_message('error', '[UpdateMenu] ' . $e->getMessage());
    //         return $this->response->setJSON(['success' => false, 'message' => 'Terjadi kesalahan sistem: ' . $e->getMessage()]);
    //     }
    // }


    // --- FUNGSI BANTUAN UNTUK MEMBACA SETTING MENU WEB ---
    private function getWebMenuConfig()
    {
        $settingModel = new HomeSettingModel();
        $config = $settingModel->where('key_name', 'web_menu_config')->first();
        return $config ? json_decode($config['value_text'], true) : [];
    }

    // --- HALAMAN KELOLA MENU ---
    public function menu()
    {
        if (!session()->get('isLoggedIn')) return redirect()->to('/admin');

        $adminMenuModel = new AdminMenuModel();
        $posData = $adminMenuModel->getAllMenuDataAdmin(); 
        
        $webConfig = $this->getWebMenuConfig();
        foreach ($posData as &$kategori) {
            foreach ($kategori['items'] as &$item) {
                $kode = $item['kode_menu'];
                
                $item['is_hidden'] = isset($webConfig[$kode]['is_hidden']) ? $webConfig[$kode]['is_hidden'] : false;
                
                if (!empty($webConfig[$kode]['nama_menu'])) {
                    $item['nama_menu'] = $webConfig[$kode]['nama_menu'];
                }
                
                if (!empty($webConfig[$kode]['foto'])) {
                    $item['foto'] = $webConfig[$kode]['foto'];
                }
            }
        }

        $data = [
            'title'    => 'Kelola Menu - Admin',
            'menuData' => $posData
        ];

        return view('admin-web/menu-setting', $data);
    }

    // --- PROSES TOGGLE TAMPIL/SEMBUNYI MENU ---
    public function toggleMenuVisibility()
    {
        if (!session()->get('isLoggedIn')) return $this->response->setJSON(['success' => false, 'message' => 'Unauthorized']);

        $kdmenu = $this->request->getPost('kode_menu');
        $isVisible = $this->request->getPost('is_visible');

        if (!$kdmenu) return $this->response->setJSON(['success' => false, 'message' => 'Kode menu tidak valid']);

        $config = $this->getWebMenuConfig();

        if (!isset($config[$kdmenu])) $config[$kdmenu] = [];

        $config[$kdmenu]['is_hidden'] = ($isVisible == '0') ? true : false;

        $this->saveSetting('web_menu_config', json_encode($config));

        return $this->response->setJSON(['success' => true]);
    }

    // --- PROSES EDIT NAMA & GAMBAR MENU ---
    public function updateWebInfo()
    {
        if (!$this->request->isAJAX()) return $this->response->setJSON(['success' => false, 'message' => 'Direct access not allowed']);

        $kodeMenu = $this->request->getPost('kode_menu');
        $namaMenu = $this->request->getPost('nama_menu');

        if (empty($kodeMenu) || empty($namaMenu)) {
            return $this->response->setJSON(['success' => false, 'message' => 'Kode atau Nama Menu tidak boleh kosong.']);
        }

        $config = $this->getWebMenuConfig();
        
        if (!isset($config[$kodeMenu])) $config[$kodeMenu] = [];

        $config[$kodeMenu]['nama_menu'] = $namaMenu;

        $fileFoto = $this->request->getFile('foto');
        $newFotoName = null;

        if ($fileFoto && $fileFoto->isValid() && !$fileFoto->hasMoved()) {
            $newFotoName = $fileFoto->getRandomName();
            if ($fileFoto->move(FCPATH . 'uploads/menu', $newFotoName)) {
                
                if (!empty($config[$kodeMenu]['foto']) && file_exists(FCPATH . 'uploads/menu/' . $config[$kodeMenu]['foto'])) {
                    unlink(FCPATH . 'uploads/menu/' . $config[$kodeMenu]['foto']);
                }
                
                $config[$kodeMenu]['foto'] = $newFotoName;
            }
        }

        // Simpan semua kustomisasi kembali ke tabel Settings (Bukan POS DB)
        $this->saveSetting('web_menu_config', json_encode($config));

        return $this->response->setJSON([
            'success'  => true,
            'message'  => 'Data menu web berhasil diperbarui.',
            'new_foto' => $newFotoName
        ]);
    }

    // --- HALAMAN KELOLA ABOUT ---
    public function about()
    {
        if (!session()->get('isLoggedIn')) return redirect()->to('/admin');

        // Ambil data settings
        $settingModel = new HomeSettingModel();
        $settingsRaw = $settingModel->findAll();
        $settings = [];
        foreach ($settingsRaw as $s) {
            $settings[$s['key_name']] = $s['value_text'];
        }

        $data = [
            'title'    => 'Kelola Halaman About - Admin',
            'settings' => $settings,
        ];

        return view('admin-web/about-setting', $data);
    }

    // --- PROSES UPDATE ABOUT ---
    public function updateAbout()
    {
        if (!session()->get('isLoggedIn')) return redirect()->to('/admin');

        // 1. Simpan Teks Standar
        $teksKeys = [
            'about_hero_kicker', 'about_hero_desc', 
            'about_story_years', 'about_story_title', 'about_story_text',
            'about_visi', 'about_misi', 'about_rating'
        ];

        foreach ($teksKeys as $key) {
            if ($this->request->getPost($key) !== null) {
                $this->saveSetting($key, $this->request->getPost($key));
            }
        }

        // 2. Simpan 4 Fitur "Why Choose Us"
        $featureTitles = $this->request->getPost('feature_title');
        $featureDescs = $this->request->getPost('feature_desc');
        $features = [];
        if (is_array($featureTitles)) {
            // Batasi maksimal 4 fitur
            for ($i = 0; $i < min(4, count($featureTitles)); $i++) {
                if (!empty(trim($featureTitles[$i])) && !empty(trim($featureDescs[$i]))) {
                    $features[] = [
                        'title' => trim($featureTitles[$i]),
                        'desc'  => trim($featureDescs[$i])
                    ];
                }
            }
        }
        $this->saveSetting('about_features', json_encode($features));

        // 3. Simpan FAQ (Tak Terbatas)
        $faqQuestions = $this->request->getPost('faq_question');
        $faqAnswers = $this->request->getPost('faq_answer');
        $faqs = [];
        if (is_array($faqQuestions)) {
            for ($i = 0; $i < count($faqQuestions); $i++) {
                if (!empty(trim($faqQuestions[$i])) && !empty(trim($faqAnswers[$i]))) {
                    $faqs[] = [
                        'question' => trim($faqQuestions[$i]),
                        'answer'   => trim($faqAnswers[$i])
                    ];
                }
            }
        }
        $this->saveSetting('about_faqs', json_encode($faqs));

        // 4. Pastikan folder uploads/about/ ada
        if (!is_dir(FCPATH . 'uploads/about')) {
            mkdir(FCPATH . 'uploads/about', 0777, true);
        }

        // 5. Simpan Gambar Hero About
        $fileHero = $this->request->getFile('about_hero_img');
        if ($fileHero && $fileHero->isValid() && !$fileHero->hasMoved()) {
            $newName = $fileHero->getRandomName();
            if ($fileHero->move(FCPATH . 'uploads/about', $newName)) {
                $this->saveSetting('about_hero_img', $newName);
            }
        }

        // 6. Simpan Gambar Story
        $fileStory = $this->request->getFile('about_story_img');
        if ($fileStory && $fileStory->isValid() && !$fileStory->hasMoved()) {
            $newName = $fileStory->getRandomName();
            if ($fileStory->move(FCPATH . 'uploads/about', $newName)) {
                $this->saveSetting('about_story_img', $newName);
            }
        }

        session()->setFlashdata('success', 'Halaman About berhasil diperbarui!');
        return redirect()->to('/dashboard-adm/about');
    }

    // =======================================================
    // HALAMAN KELOLA BERITA & PENGUMUMAN
    // =======================================================
    public function berita()
    {
        if (!session()->get('isLoggedIn')) return redirect()->to('/admin');

        $settingModel = new \App\Models\HomeSettingModel();
        $settingsRaw = $settingModel->findAll();
        $settings = [];
        foreach ($settingsRaw as $s) {
            $settings[$s['key_name']] = $s['value_text'];
        }

        $data = [
            'title'    => 'Kelola Berita & Pengumuman',
            'settings' => $settings,
        ];

        return view('admin-web/berita-setting', $data);
    }

    public function updateBerita()
    {
        if (!session()->get('isLoggedIn')) return redirect()->to('/admin');

        // Pastikan folder uploads/berita/ ada
        if (!is_dir(FCPATH . 'uploads/berita')) {
            mkdir(FCPATH . 'uploads/berita', 0777, true);
        }

        $action = $this->request->getPost('action'); // Menentukan aksi form
        $settingModel = new \App\Models\HomeSettingModel();

        // ==========================================
        // 1. AKSI: TOGGLE STATUS ON/OFF (AJAX)
        // ==========================================
        if ($action == 'toggle') {
            $type = $this->request->getPost('type');
            $index = $this->request->getPost('index');
            $status = $this->request->getPost('status');

            $key = ($type == 'pengumuman') ? 'pengumuman_list' : 'berita_list';
            $raw = $settingModel->where('key_name', $key)->first();
            $list = $raw ? json_decode($raw['value_text'], true) : [];

            if (isset($list[$index])) {
                $list[$index]['status'] = $status;
                $this->saveSetting($key, json_encode($list));
                return $this->response->setJSON(['success' => true]);
            }
            return $this->response->setJSON(['success' => false]);
        }

        // ==========================================
        // 2. AKSI: UPDATE BANNER HERO
        // ==========================================
        if ($action == 'hero') {
            $this->saveSetting('berita_hero_kicker', $this->request->getPost('berita_hero_kicker'));
            $this->saveSetting('berita_hero_desc', $this->request->getPost('berita_hero_desc'));
            
            $fileHero = $this->request->getFile('berita_hero_img');
            if ($fileHero && $fileHero->isValid() && !$fileHero->hasMoved()) {
                $newName = $fileHero->getRandomName();
                if ($fileHero->move(FCPATH . 'uploads/berita', $newName)) {
                    $this->saveSetting('berita_hero_img', $newName);
                }
            }
            session()->setFlashdata('success', 'Banner Atas berhasil diperbarui!');
            return redirect()->to('/dashboard-adm/berita');
        }

        // ==========================================
        // 3. AKSI: TAMBAH DATA BARU
        // ==========================================
        if ($action == 'add') {
            $type = $this->request->getPost('item_type');
            $key = ($type == 'pengumuman') ? 'pengumuman_list' : 'berita_list';
            $raw = $settingModel->where('key_name', $key)->first();
            $list = $raw ? json_decode($raw['value_text'], true) : [];

            $imgName = '';
            $file = $this->request->getFile('img');
            if ($file && $file->isValid() && !$file->hasMoved()) {
                $newName = $file->getRandomName();
                if ($file->move(FCPATH . 'uploads/berita', $newName)) {
                    $imgName = $newName;
                }
            }

            $newItem = [
                'title'      => trim($this->request->getPost('title')),
                'date'       => trim($this->request->getPost('date')),
                'desc'       => trim($this->request->getPost('desc')),
                'status'     => '1', // Otomatis On
                'start_date' => trim($this->request->getPost('start_date')),
                'end_date'   => trim($this->request->getPost('end_date')),
                'img'        => $imgName
            ];

            if ($type == 'pengumuman') {
                $newItem['label'] = trim($this->request->getPost('label') ?? 'Info');
            } else {
                $newItem['read'] = trim($this->request->getPost('read') ?? '2 min read');
            }

            array_unshift($list, $newItem); // Menambahkan ke paling atas list
            $this->saveSetting($key, json_encode($list));

            session()->setFlashdata('success', ucfirst($type) . ' baru berhasil ditambahkan!');
            return redirect()->to('/dashboard-adm/berita');
        }

        // ==========================================
        // 4. AKSI: SIMPAN PERUBAHAN (EDIT)
        // ==========================================
        if ($action == 'edit') {
            $type = $this->request->getPost('item_type');
            $index = $this->request->getPost('item_index');
            $key = ($type == 'pengumuman') ? 'pengumuman_list' : 'berita_list';
            
            $raw = $settingModel->where('key_name', $key)->first();
            $list = $raw ? json_decode($raw['value_text'], true) : [];

            if (isset($list[$index])) {
                $list[$index]['title']      = trim($this->request->getPost('title'));
                $list[$index]['date']       = trim($this->request->getPost('date'));
                $list[$index]['desc']       = trim($this->request->getPost('desc'));
                $list[$index]['start_date'] = trim($this->request->getPost('start_date'));
                $list[$index]['end_date']   = trim($this->request->getPost('end_date'));

                if ($type == 'pengumuman') {
                    $list[$index]['label'] = trim($this->request->getPost('label'));
                } else {
                    $list[$index]['read'] = trim($this->request->getPost('read'));
                }

                $file = $this->request->getFile('img');
                if ($file && $file->isValid() && !$file->hasMoved()) {
                    $newName = $file->getRandomName();
                    if ($file->move(FCPATH . 'uploads/berita', $newName)) {
                        $list[$index]['img'] = $newName;
                    }
                }

                $this->saveSetting($key, json_encode($list));
                session()->setFlashdata('success', 'Data ' . ucfirst($type) . ' berhasil diperbarui!');
            }
            return redirect()->to('/dashboard-adm/berita');
        }

        // ==========================================
        // 5. AKSI: HAPUS DATA
        // ==========================================
        if ($action == 'delete') {
            $type = $this->request->getPost('item_type');
            $index = $this->request->getPost('item_index');
            $key = ($type == 'pengumuman') ? 'pengumuman_list' : 'berita_list';
            
            $raw = $settingModel->where('key_name', $key)->first();
            $list = $raw ? json_decode($raw['value_text'], true) : [];

            if (isset($list[$index])) {
                unset($list[$index]);
                $list = array_values($list); // Tata ulang urutan array agar rapi
                $this->saveSetting($key, json_encode($list));
                session()->setFlashdata('success', 'Data berhasil dihapus!');
            }
            return redirect()->to('/dashboard-adm/berita');
        }

        // Fallback
        return redirect()->to('/dashboard-adm/berita');
    }

    // =======================================================
    // HALAMAN KELOLA GALERI MOMEN
    // =======================================================
    public function galeri()
    {
        if (!session()->get('isLoggedIn')) return redirect()->to('/admin');

        $settingModel = new \App\Models\HomeSettingModel();
        $galeriRaw = $settingModel->where('key_name', 'galeri_list')->first();
        $galeriList = $galeriRaw ? json_decode($galeriRaw['value_text'], true) : [];

        $data = [
            'title'      => 'Kelola Galeri',
            'galeriList' => $galeriList
        ];

        return view('admin-web/galeri-setting', $data);
    }

    public function saveGaleri()
    {
        if (!session()->get('isLoggedIn')) return redirect()->to('/admin');

        $settingModel = new \App\Models\HomeSettingModel();
        $galeriRaw = $settingModel->where('key_name', 'galeri_list')->first();
        $galeriList = $galeriRaw ? json_decode($galeriRaw['value_text'], true) : [];

        $id = $this->request->getPost('id'); // Jika ada ID, berarti edit
        $title = $this->request->getPost('title');
        $desc = $this->request->getPost('desc');

        // Pastikan folder assets/img/gb_galery ada
        $uploadPath = FCPATH . 'assets/img/gb_galery';
        if (!is_dir($uploadPath)) mkdir($uploadPath, 0777, true);

        $imgName = $this->request->getPost('old_img');
        $fileImg = $this->request->getFile('img');

        if ($fileImg && $fileImg->isValid() && !$fileImg->hasMoved()) {
            $newName = $fileImg->getRandomName();
            if ($fileImg->move($uploadPath, $newName)) {
                // Hapus foto lama jika ini proses edit
                if (!empty($imgName) && file_exists($uploadPath . '/' . $imgName)) {
                    unlink($uploadPath . '/' . $imgName);
                }
                $imgName = $newName;
            }
        }

        if (empty($id)) {
            // Tambah Baru
            $galeriList[] = [
                'id'     => uniqid(),
                'title'  => trim($title),
                'desc'   => trim($desc),
                'img'    => $imgName,
                'source' => 'Admin'
            ];
        } else {
            // Update
            foreach ($galeriList as &$g) {
                if ($g['id'] == $id) {
                    $g['title'] = trim($title);
                    $g['desc']  = trim($desc);
                    $g['img']   = $imgName;
                    break;
                }
            }
        }

        $this->saveSetting('galeri_list', json_encode($galeriList));
        session()->setFlashdata('success', 'Data galeri berhasil disimpan!');
        return redirect()->to('/dashboard-adm/galeri');
    }

    public function deleteGaleri($id)
    {
        if (!session()->get('isLoggedIn')) return redirect()->to('/admin');

        $settingModel = new \App\Models\HomeSettingModel();
        $galeriRaw = $settingModel->where('key_name', 'galeri_list')->first();
        $galeriList = $galeriRaw ? json_decode($galeriRaw['value_text'], true) : [];

        $uploadPath = FCPATH . 'assets/img/gb_galery';

        foreach ($galeriList as $key => $g) {
            if ($g['id'] == $id) {
                // Hapus file fisiknya
                if (!empty($g['img']) && file_exists($uploadPath . '/' . $g['img'])) {
                    unlink($uploadPath . '/' . $g['img']);
                }
                unset($galeriList[$key]);
                break;
            }
        }

        $galeriList = array_values($galeriList); // Re-index array
        $this->saveSetting('galeri_list', json_encode($galeriList));

        session()->setFlashdata('success', 'Foto galeri berhasil dihapus!');
        return redirect()->to('/dashboard-adm/galeri');
    }

    // =======================================================
    // HALAMAN KELOLA KARIR & PELAMAR
    // =======================================================
    public function karir()
    {
        if (!session()->get('isLoggedIn')) return redirect()->to('/admin');

        $settingModel = new \App\Models\HomeSettingModel();
        
        // Ambil Data Lowongan
        $karirRaw = $settingModel->where('key_name', 'karir_list')->first();
        $karirList = $karirRaw ? json_decode($karirRaw['value_text'], true) : [];

        // Ambil Data Pelamar
        $appRaw = $settingModel->where('key_name', 'applicant_list')->first();
        $appList = $appRaw ? json_decode($appRaw['value_text'], true) : [];

        $data = [
            'title'     => 'Kelola Karir & Pelamar',
            'karirList' => $karirList,
            'appList'   => array_reverse($appList) // Balik agar pelamar terbaru di atas
        ];

        return view('admin-web/karir-setting', $data);
    }

    public function saveKarir()
    {
        if (!session()->get('isLoggedIn')) return redirect()->to('/admin');

        $settingModel = new \App\Models\HomeSettingModel();
        $karirRaw = $settingModel->where('key_name', 'karir_list')->first();
        $karirList = $karirRaw ? json_decode($karirRaw['value_text'], true) : [];

        $id = $this->request->getPost('id');
        
        $newData = [
            'id'           => empty($id) ? uniqid('job_') : $id,
            'title'        => trim($this->request->getPost('title')),
            'type'         => trim($this->request->getPost('type')), // Full-Time / Part-Time
            'location'     => trim($this->request->getPost('location')),
            'deadline'     => trim($this->request->getPost('deadline')),
            'short_desc'   => trim($this->request->getPost('short_desc')),
            'jobdesc'      => trim($this->request->getPost('jobdesc')),
            'kualifikasi'  => trim($this->request->getPost('kualifikasi')),
        ];

        if (empty($id)) {
            $karirList[] = $newData; // Tambah Baru
        } else {
            // Update
            foreach ($karirList as &$k) {
                if ($k['id'] == $id) {
                    $k = $newData;
                    break;
                }
            }
        }

        $this->saveSetting('karir_list', json_encode($karirList));
        session()->setFlashdata('success', 'Data lowongan berhasil disimpan!');
        return redirect()->to('/dashboard-adm/karir');
    }

    public function deleteKarir($id)
    {
        if (!session()->get('isLoggedIn')) return redirect()->to('/admin');

        $settingModel = new \App\Models\HomeSettingModel();
        $karirRaw = $settingModel->where('key_name', 'karir_list')->first();
        $karirList = $karirRaw ? json_decode($karirRaw['value_text'], true) : [];

        foreach ($karirList as $key => $k) {
            if ($k['id'] == $id) {
                unset($karirList[$key]);
                break;
            }
        }

        $karirList = array_values($karirList);
        $this->saveSetting('karir_list', json_encode($karirList));

        session()->setFlashdata('success', 'Lowongan berhasil dihapus!');
        return redirect()->to('/dashboard-adm/karir');
    }

    // =======================================================
    // HALAMAN KELOLA KEDAI / OUTLET
    // =======================================================
   public function kedai()
    {
        if (!session()->get('isLoggedIn')) return redirect()->to('/admin');

        $tokoModel = new \App\Models\TokoModel();
        
        // 1. Ambil data toko (Sama persis seperti di Home.php)
        $list_toko = $tokoModel->where('stat', 2)->where('kd_toko !=', 'YOG09')->findAll();

        // 2. BACKUP PENGAMAN: Jika data masih terdeteksi kosong, ambil semua data toko
        if (empty($list_toko)) {
            $list_toko = $tokoModel->findAll();
        }

        $settingModel = new \App\Models\HomeSettingModel();
        $hiddenSetting = $settingModel->where('key_name', 'hidden_outlets')->first();
        $hiddenOutlets = $hiddenSetting ? json_decode($hiddenSetting['value_text'], true) : [];
        if (!is_array($hiddenOutlets)) $hiddenOutlets = [];

        $data = [
            'title'         => 'Kelola Tampilan Kedai',
            'list_toko'     => $list_toko,
            'hiddenOutlets' => $hiddenOutlets
        ];

        return view('admin-web/kedai-setting', $data);
    }

    public function toggleKedaiVisibility()
    {
        // Pastikan user sudah login dan respons menggunakan format JSON yang diharapkan AJAX
        if (!session()->get('isLoggedIn')) {
            return $this->response->setJSON(['success' => false, 'message' => 'Unauthorized']);
        }

        $settingModel = new \App\Models\HomeSettingModel();

        // Tangkap data dari JS fetch() di kedai-setting.php
        $kd_toko = $this->request->getPost('kd_toko');
        $isVisible = $this->request->getPost('is_visible');

        if (!$kd_toko) {
            return $this->response->setJSON(['success' => false, 'message' => 'Kode outlet tidak valid']);
        }

        // Ambil data 'hidden_outlets' saat ini (Sama seperti yang dibaca oleh Home.php)
        $hiddenSetting = $settingModel->where('key_name', 'hidden_outlets')->first();
        $hiddenOutlets = $hiddenSetting ? json_decode($hiddenSetting['value_text'], true) : [];
        if (!is_array($hiddenOutlets)) {
            $hiddenOutlets = [];
        }

        if ($isVisible == '0') {
            // Jika OFF: Sembunyikan outlet (Masukkan ke array hiddenOutlets)
            if (!in_array($kd_toko, $hiddenOutlets)) {
                $hiddenOutlets[] = $kd_toko;
            }
        } else {
            // Jika ON: Tampilkan kembali outlet (Hapus dari array hiddenOutlets)
            $hiddenOutlets = array_filter($hiddenOutlets, function ($item) use ($kd_toko) {
                return $item !== $kd_toko;
            });
            $hiddenOutlets = array_values($hiddenOutlets); // Rapikan urutan index array
        }

        // Simpan perubahan ke database settings
        $this->saveSetting('hidden_outlets', json_encode($hiddenOutlets));
        
        // Kembalikan success: true agar JS di kedai-setting tidak memunculkan alert error
        return $this->response->setJSON([
            'success' => true,
            'message' => 'Status visibility berhasil diupdate'
        ]);
    }
}