<?php

namespace App\Controllers;

use App\Models\PengaduanModel;
use App\Models\StatusModel;
use App\Models\PengaduanHistoryModel;
use App\Models\PengaturanModel;

class Admin extends BaseController
{
    public function index()
    {
        $pengaduanModel = new PengaduanModel();

        // Menghitung statistik berdasarkan status_id
        $data = [
            'title'           => 'Dashboard',
            'total'           => $pengaduanModel->countAllResults(),
            'baru'            => $pengaduanModel->where('status_id', 1)->countAllResults(), // Status: Baru
            'ditunda'         => $pengaduanModel->where('status_id', 2)->countAllResults(), // Status: Ditunda
            'ditindaklanjuti' => $pengaduanModel->where('status_id', 3)->countAllResults(), // Status: Ditindaklanjuti
            'tuntas'          => $pengaduanModel->where('status_id', 4)->countAllResults(), // Status: Tuntas
        ];

        return view('admin/dashboard', $data);
    }

    public function kelola()
    {
        $pengaduanModel = new PengaduanModel();

        // Tangkap request GET dari form filter
        $jenis_id = $this->request->getGet('jenis');
        $status_id = $this->request->getGet('status');

        $builder = $pengaduanModel->builder();
        $builder->select('pengaduan.*, status.nama_status, kategori.nama_kategori, komisi.nama_komisi, anggota_dprd.nama_anggota');
        $builder->join('status', 'status.id = pengaduan.status_id', 'left');
        $builder->join('kategori', 'kategori.id = pengaduan.kategori_id', 'left');
        $builder->join('komisi', 'komisi.id = pengaduan.komisi_id', 'left');
        $builder->join('anggota_dprd', 'anggota_dprd.id = pengaduan.anggota_dprd_id', 'left');
        
        // Logika Filter jika dipilih
        if (!empty($jenis_id)) {
            $builder->where('pengaduan.kategori_id', $jenis_id);
        }
        if (!empty($status_id)) {
            $builder->where('pengaduan.status_id', $status_id);
        }

        $builder->orderBy('pengaduan.created_at', 'DESC');
        
        $data = [
            'title'         => 'Kelola Pengaduan',
            'pengaduan'     => $builder->get()->getResultArray(),
            'filter_jenis'  => $jenis_id,
            'filter_status' => $status_id
        ];

        return view('admin/kelola_pengaduan', $data);
    }
    
    // --- TAMBAHKAN Filter INI ---
    public function filter()
    {
        $pengaduanModel = new PengaduanModel();
        
        // Tangkap nilai filter dari AJAX
        $jenis_id = $this->request->getGet('jenis');
        $status_id = $this->request->getGet('status');

        $builder = $pengaduanModel->builder();
        $builder->select('pengaduan.*, status.nama_status, kategori.nama_kategori, komisi.nama_komisi, anggota_dprd.nama_anggota');
        $builder->join('status', 'status.id = pengaduan.status_id', 'left');
        $builder->join('kategori', 'kategori.id = pengaduan.kategori_id', 'left');
        $builder->join('komisi', 'komisi.id = pengaduan.komisi_id', 'left');
        $builder->join('anggota_dprd', 'anggota_dprd.id = pengaduan.anggota_dprd_id', 'left');
        
        // Terapkan kondisi jika filter dipilih
        if (!empty($jenis_id)) {
            $builder->where('pengaduan.kategori_id', $jenis_id);
        }
        if (!empty($status_id)) {
            $builder->where('pengaduan.status_id', $status_id);
        }
        
        $builder->orderBy('pengaduan.created_at', 'DESC');
        
        $data['pengaduan'] = $builder->get()->getResultArray();

        // Render hasil pencarian ke dalam dua view partisi (Tabel & Modal) lalu kirim sebagai JSON
        return $this->response->setJSON([
            'html_tabel' => view('admin/tabel_pengaduan_ajax', $data),
            'html_modal' => view('admin/modal_pengaduan_ajax', $data)
        ]);
    }
    // --- AKHIR TAMBAHAN FUNGSI ---

    public function detail($id_pengaduan)
    {
        $pengaduanModel = new PengaduanModel();
        $historyModel = new PengaduanHistoryModel();
        $statusModel = new StatusModel();

        // Ambil detail pengaduan beserta nama kategori, komisi, anggota dprd, & status
        $builder = $pengaduanModel->builder();
        $builder->select('pengaduan.*, kategori.nama_kategori, komisi.nama_komisi, anggota_dprd.nama_anggota, status.nama_status');
        $builder->join('kategori', 'kategori.id = pengaduan.kategori_id', 'left');
        $builder->join('komisi', 'komisi.id = pengaduan.komisi_id', 'left');
        $builder->join('anggota_dprd', 'anggota_dprd.id = pengaduan.anggota_dprd_id', 'left');
        $builder->join('status', 'status.id = pengaduan.status_id', 'left');
        $builder->where('id_pengaduan', $id_pengaduan);
        $pengaduan = $builder->get()->getRowArray();

        // Ambil riwayat progres (timeline)
        $historyBuilder = $historyModel->builder();
        $historyBuilder->select('pengaduan_history.*, status.nama_status');
        $historyBuilder->join('status', 'status.id = pengaduan_history.status_id');
        $historyBuilder->where('pengaduan_id', $id_pengaduan);
        $historyBuilder->orderBy('created_at', 'ASC');

        $data = [
            'pengaduan'      => $pengaduan,
            'history'        => $historyBuilder->get()->getResultArray(),
            'status_options' => $statusModel->findAll()
        ];

        return view('admin/detail_pengaduan', $data);
    }

    public function updateProgres()
    {
        $pengaduanModel = new PengaduanModel();
        $historyModel = new PengaduanHistoryModel();

        $id_pengaduan = $this->request->getPost('id_pengaduan');
        $status_id    = $this->request->getPost('status_id');
        $tanggapan    = $this->request->getPost('tanggapan');

        // 1. Simpan catatan ke tabel History
        $historyModel->insert([
            'pengaduan_id' => $id_pengaduan,
            'status_id'    => $status_id,
            'tanggapan'    => $tanggapan
        ]);

        // 2. Update status utama di tabel Pengaduan
        $pengaduanModel->update($id_pengaduan, ['status_id' => $status_id]);

        // 3. Logika Trigger WA Gateway (GoWA)
        $pengaduan = $pengaduanModel->find($id_pengaduan);
        
        if ($pengaduan['is_anonim'] == 0 && !empty($pengaduan['no_hp'])) {
            // TODO: Masukkan script cURL GoWA di sini nanti.
            // Data tersedia: $pengaduan['no_hp'], $tanggapan, dan ID Pengaduan.
        }

        return redirect()->to(base_url('admin/pengaduan/detail/' . $id_pengaduan));
    }

    public function pengaturan()
    {
        $pengaturanModel = new PengaturanModel();
        $data = [
            'title' => 'Pengaturan Sistem',
            'pengaturan' => $pengaturanModel->find(1)
        ];
        return view('admin/pengaturan', $data);
    }

    public function simpanPengaturan()
    {
        $pengaturanModel = new PengaturanModel();
        $pengaturanModel->update(1, [
            'nama_instansi' => $this->request->getPost('nama_instansi'),
            'gowa_url'      => rtrim($this->request->getPost('gowa_url'), '/'),
            'gowa_auth'     => $this->request->getPost('gowa_auth')
        ]);
        return redirect()->to(base_url('admin/pengaturan'))->with('pesan', 'Pengaturan berhasil disimpan!');
    }

    // Fungsi cURL untuk mengambil QR dari GoWA API
    public function getGowaQR()
    {
        $pengaturanModel = new PengaturanModel();
        $pengaturan = $pengaturanModel->find(1);
        
        $url = $pengaturan['gowa_url'] . '/devices/tard_sbb/login';
        $auth = base64_encode($pengaturan['gowa_auth']);

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, [
            'Authorization: Basic ' . $auth
        ]);
        // Abaikan SSL jika GoWA berjalan di lokal (HTTP)
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        
        $response = curl_exec($ch);
        $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);

        return $this->response->setJSON([
            'status' => $httpcode,
            'data'   => json_decode($response, true)
        ]);
    }

    public function getGowaStatus()
    {
        $pengaturanModel = new PengaturanModel();
        $pengaturan = $pengaturanModel->find(1);
        
        // Endpoint untuk mengecek status device
        $url = $pengaturan['gowa_url'] . '/devices/tard_sbb/status';
        $auth = base64_encode($pengaturan['gowa_auth']);

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, ['Authorization: Basic ' . $auth]);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        
        $response = curl_exec($ch);
        $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);

        return $this->response->setJSON([
            'status' => $httpcode,
            'data'   => json_decode($response, true)
        ]);
    }
}