<?php

namespace App\Controllers;

use App\Models\AlokasiModel;
use App\Models\PetaniModel;
use App\Models\PupukModel;

class Alokasi extends BaseController
{
    protected $alokasiM;
    protected $db;

    public function __construct()
    {
        $this->alokasiM = new AlokasiModel();
        $this->db = \Config\Database::connect();
    }

    // Menampilkan halaman form filter cetak laporan
    public function laporan()
    {
        $data = [
            'title' => 'Filter Laporan Penyaluran e-RDKK'
        ];
        return view('alokasi/laporan', $data);
    }

    // Menampilkan halaman index data alokasi kuota utama
    public function index()
    {
        // Query Builder untuk Join Tabel Alokasi, Petani, dan Pupuk
        $builder = $this->db->table('alokasi_kuota');
        $builder->select('alokasi_kuota.*, petani.nama_petani, petani.nik, pupuk.nama_pupuk');
        $builder->join('petani', 'petani.id_petani = alokasi_kuota.id_petani');
        $builder->join('pupuk', 'pupuk.id_pupuk = alokasi_kuota.id_pupuk');
        $builder->orderBy('alokasi_kuota.tahun_tanam', 'DESC');
        $alokasi = $builder->get()->getResultArray();

        // Ambil data untuk dropdown di Modal Tambah
        $petaniM = new PetaniModel();
        $pupukM = new PupukModel();

        $data = [
            'title'   => 'Data Alokasi Kuota e-RDKK',
            'alokasi' => $alokasi,
            'petani'  => $petaniM->findAll(),
            'pupuk'   => $pupukM->findAll()
        ];

        return view('alokasi/index', $data);
    }

    // Menyimpan data kuota secara manual
    public function simpan()
    {
        $this->alokasiM->save([
            'id_petani'   => $this->request->getPost('id_petani'),
            'id_pupuk'    => $this->request->getPost('id_pupuk'),
            'tahun_tanam' => $this->request->getPost('tahun_tanam'),
            'jatah_kg'    => $this->request->getPost('jatah_kg'),
            'terpakai_kg' => 0 // Awal kuota terpakai pasti 0
        ]);

        return redirect()->to('/alokasi')->with('success', 'Kuota alokasi petani <b>berhasil ditambahkan</b>.');
    }

    // Menghapus kuota alokasi
    public function hapus($id)
    {
        $this->alokasiM->delete($id);
        return redirect()->to('/alokasi')->with('success', 'Data kuota <b>berhasil dihapus</b>.');
    }

    // Membuat alokasi otomatis berdasarkan luas lahan petani
    public function generate_otomatis()
    {
        $id_pupuk     = $this->request->getPost('id_pupuk');
        $jatah_per_ha = $this->request->getPost('jatah_per_ha');
        $tahun        = date('Y');

        $petaniM     = new PetaniModel(); // Menggunakan class yang sudah di-import di atas
        $semuaPetani = $petaniM->where('status_aktif', 'aktif')->findAll();

        $berhasil = 0;
        foreach ($semuaPetani as $p) {
            $jatah_diterima = $p['luas_lahan'] * $jatah_per_ha;

            // Cek apakah petani sudah punya alokasi pupuk ini di tahun yang sama
            $cek = $this->alokasiM->where([
                'id_petani'   => $p['id_petani'], 
                'id_pupuk'    => $id_pupuk, 
                'tahun_tanam' => $tahun
            ])->first();

            if (!$cek) {
                $this->alokasiM->insert([
                    'id_petani'   => $p['id_petani'],
                    'id_pupuk'    => $id_pupuk,
                    'tahun_tanam' => $tahun,
                    'jatah_kg'    => $jatah_diterima,
                    'terpakai_kg' => 0
                ]);
                $berhasil++;
            }
        }

        return redirect()->to('/alokasi')->with('success', "Generate otomatis selesai. <b>$berhasil petani</b> berhasil diberikan alokasi.");
    }

    // Memproses data riwayat transaksi berdasarkan filter tanggal untuk dicetak
    public function cetak()
    {
        $filter  = $this->request->getGet('filter'); // Isi: 'hari', 'bulan', atau 'tahun'
        $tanggal = $this->request->getGet('tanggal') ?? date('Y-m-d');
        $bulan   = $this->request->getGet('bulan') ?? date('m');
        $tahun   = $this->request->getGet('tahun') ?? date('Y');

        $builder = $this->db->table('transaksi_penebusan');
        $builder->select('transaksi_penebusan.*, petani.nama_petani, petani.nik, pupuk.nama_pupuk');
        $builder->join('petani', 'petani.id_petani = transaksi_penebusan.id_petani');
        $builder->join('pupuk', 'pupuk.id_pupuk = transaksi_penebusan.id_pupuk');

        // PERBAIKAN: Menambahkan operator '=' agar CI4 Query Builder tidak merusak fungsi SQL
        if ($filter == 'hari') {
            $builder->where('DATE(transaksi_penebusan.tanggal_transaksi) =', $tanggal);
            $periodeText = "PERIODE HARIAN: " . date('d-m-Y', strtotime($tanggal));
        } elseif ($filter == 'bulan') {
            $builder->where('MONTH(transaksi_penebusan.tanggal_transaksi) =', $bulan);
            $builder->where('YEAR(transaksi_penebusan.tanggal_transaksi) =', $tahun);
            
            $nama_bulan = ["", "Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember"];
            $periodeText = "PERIODE BULANAN: " . strtoupper($nama_bulan[(int)$bulan]) . " " . $tahun;
        } else {
            // Default tahunan
            $builder->where('YEAR(transaksi_penebusan.tanggal_transaksi) =', $tahun);
            $periodeText = "PERIODE TAHUNAN: " . $tahun;
        }

        $builder->orderBy('transaksi_penebusan.tanggal_transaksi', 'ASC');

        $data = [
            'title'       => 'Laporan Realisasi Penebusan Pupuk e-RDKK',
            'alokasi'     => $builder->get()->getResultArray(),
            'periodeText' => $periodeText
        ];

        return view('alokasi/cetak', $data);
    }
}