<?php

namespace App\Controllers;

use App\Models\KategoriModel;
use App\Models\KomisiModel;
use App\Models\PengaduanModel;
use App\Models\PengaduanHistoryModel;
use App\Models\PengaturanModel;
use App\Models\AnggotaDprdModel;

class Home extends BaseController
{
    // Halaman Utama (Pilih 2 Tombol)
    public function index()
    {
        $pengaturanModel = new PengaturanModel();
        $data['pengaturan'] = $pengaturanModel->find(1);
        return view('publik/landing', $data);
    }

    public function buat()
    {
        $kategoriModel = new KategoriModel();
        $komisiModel = new KomisiModel();
        $anggotaModel = new AnggotaDprdModel(); 
        $pengaturanModel = new PengaturanModel();

        $data = [
            'kategori'   => $kategoriModel->findAll(),
            'komisi'     => $komisiModel->findAll(),
            'anggota'    => $anggotaModel->findAll(), 
            'pengaturan' => $pengaturanModel->find(1)
        ];

        return view('publik/form_pengaduan', $data);
    }

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

        // Tangkap Input Kategori terlebih dahulu untuk menentukan Prefix ID
        $kategori_id = $this->request->getPost('kategori_id');
        $is_anonim   = $this->request->getPost('is_anonim');

        // Generate ID: ID-P (Pengaduan) atau ID-A (Aspirasi) + 5 digit kombinasi acak
        $prefix = ($kategori_id == 1) ? 'ID-P' : 'ID-A';
        $randomString = strtoupper(substr(md5(uniqid(mt_rand(), true)), 0, 5));
        $id_pengaduan = $prefix . $randomString;

        // Upload Lampiran (jika ada)
        $lampiran = $this->request->getFile('lampiran');
        $namaLampiran = '';
        if ($lampiran && $lampiran->isValid() && !$lampiran->hasMoved()) {
            $namaLampiran = $lampiran->getRandomName();
            $lampiran->move('uploads/lampiran', $namaLampiran);
        }

        // Logika Pemisah Tujuan: 1 = Pengaduan (Komisi), 2 = Aspirasi (Anggota DPRD)
        $komisi_id       = ($kategori_id == 1) ? $this->request->getPost('komisi_id') : null;
        $anggota_dprd_id = ($kategori_id == 2) ? $this->request->getPost('anggota_dprd_id') : null;
        
        $dataPengaduan = [
            'id_pengaduan'    => $id_pengaduan,
            'kategori_id'     => $kategori_id,
            'komisi_id'       => empty($komisi_id) ? null : $komisi_id,
            'anggota_dprd_id' => empty($anggota_dprd_id) ? null : $anggota_dprd_id,
            'is_anonim'       => $is_anonim,
            'nama'            => ($is_anonim == 1) ? null : $this->request->getPost('nama'),
            'no_hp'           => ($is_anonim == 1) ? null : $this->request->getPost('no_hp'),
            'alamat'          => ($is_anonim == 1) ? null : $this->request->getPost('alamat'),
            'judul'           => $this->request->getPost('judul'),
            'detail_laporan'  => $this->request->getPost('detail_laporan'),
            'lokasi'          => $this->request->getPost('lokasi'),
            'tanggal'         => $this->request->getPost('tanggal'),
            'lampiran'        => $namaLampiran,
            'status_id'       => 1,
        ];

        // Simpan ke database
        $pengaduanModel->insert($dataPengaduan);

        $historyModel->insert([
            'pengaduan_id' => $id_pengaduan,
            'status_id'    => 1,
            'tanggapan'    => 'Laporan berhasil dikirim dan menunggu verifikasi admin.'
        ]);

        // --- MULAI LOGIKA INSERT KE ANTREAN NOTIFIKASI ---
        $notifikasiModel = new \App\Models\NotifikasiModel();
        $komisiModel = new \App\Models\KomisiModel();
        $anggotaModel = new \App\Models\AnggotaDprdModel();

        $nama_tujuan = '';
        $no_tujuan = '';

        // Tentukan siapa yang dituju dan ambil nomor HP-nya
        if ($kategori_id == 1 && !empty($komisi_id)) {
            $komisi = $komisiModel->find($komisi_id);
            if ($komisi) {
                // Tambahan kata 'Komisi ' dihapus agar mengambil nama asli dari database
                $nama_tujuan = $komisi['nama_komisi'];
                $no_tujuan = $komisi['no_hp'];
            }
        } elseif ($kategori_id == 2 && !empty($anggota_dprd_id)) {
            $anggota = $anggotaModel->find($anggota_dprd_id);
            if ($anggota) {
                $nama_tujuan = $anggota['nama_anggota'];
                $no_tujuan = $anggota['no_hp'];
            }
        }

        // Jika nomor tujuan ditemukan, masukkan ke keranjang antrean (status = 0)
        if (!empty($no_tujuan)) {
            $judul_laporan  = $this->request->getPost('judul');
            $detail_laporan = $this->request->getPost('detail_laporan');
            $lokasi         = $this->request->getPost('lokasi');
            $tanggal        = $this->request->getPost('tanggal');
            $jenis          = ($kategori_id == 1) ? 'Pengaduan' : 'Aspirasi';
            
            // Cek kondisi Anonim untuk menentukan redaksi Data Pelapor
            if ($is_anonim == 1) {
                $data_pelapor = "*Diprivasi*";
            } else {
                $nama_pelapor   = $this->request->getPost('nama');
                $no_hp_pelapor  = $this->request->getPost('no_hp');
                $alamat_pelapor = $this->request->getPost('alamat');
                $data_pelapor   = "{$nama_pelapor} - {$no_hp_pelapor} - {$alamat_pelapor}";
            }

            // Merangkai teks pesan WA sesuai format
            $pesan_wa = "Halo. Yth, Bpk/Ibu {$nama_tujuan}\n\n";
            $pesan_wa .= "{$jenis} baru melalui sistem *Sistem Pengaduan & Aspirasi Online* Dengan detail sebagai berikut :\n\n";
            $pesan_wa .= "Data pelapor : {$data_pelapor}\n\n";
            $pesan_wa .= "Judul : {$judul_laporan}\n";
            $pesan_wa .= "Deskripsi : {$detail_laporan}\n";
            $pesan_wa .= "Lokasi : {$lokasi}\n";
            $pesan_wa .= "Tanggal : {$tanggal}\n\n";
            $pesan_wa .= "Silahkan hubungi admin untuk melakukan tindak lanjut dan melihat detail {$jenis}.\n";
            $pesan_wa .= "Terimakasih\n\n";
            $pesan_wa .= "*DPRD KABUPATEN SERAM BAGIAN BARAT*";

            $notifikasiModel->insert([
                'nama_staff' => $nama_tujuan,
                'no_tujuan'  => $no_tujuan,
                'pesan'      => $pesan_wa,
                'status'     => 0,
                'coba_kirim' => 0
            ]);
        }
        // --- SELESAI LOGIKA INSERT KE ANTREAN NOTIFIKASI ---

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

    public function sukses($id_pengaduan)
    {
        $data = ['id_pengaduan' => $id_pengaduan];
        return view('publik/sukses', $data);
    }
    
    public function cekStatus()
    {
        $id_pengaduan = $this->request->getPost('kode_akses');
        
        $pengaduanModel = new PengaduanModel();
        $historyModel = new PengaduanHistoryModel();

        $pengaduan = $pengaduanModel->find($id_pengaduan);

        $builder = $historyModel->builder();
        $builder->select('pengaduan_history.*, status.nama_status');
        $builder->join('status', 'status.id = pengaduan_history.status_id');
        $builder->where('pengaduan_id', $id_pengaduan);
        $builder->orderBy('pengaduan_history.created_at', 'ASC'); 
        $history = $builder->get()->getResultArray();

        $data = [
            'kode_akses' => $id_pengaduan,
            'pengaduan'  => $pengaduan,
            'history'    => $history
        ];

        return view('publik/cek_status', $data);
    }
}