<?php

namespace App\Controllers;

use App\Models\NotifikasiModel;

class Notifikasi extends BaseController
{
    public function index()
    {
        $notifikasiModel = new NotifikasiModel();
        
        // Ambil semua data riwayat notifikasi, urutkan dari yang paling baru
        $data = [
            'title'      => 'Pusat Notifikasi',
            'notifikasi' => $notifikasiModel->orderBy('created_at', 'DESC')->findAll()
        ];

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

    public function prosesAntrian()
    {
        $notifikasiModel = new NotifikasiModel();
        $pengaturanModel = new \App\Models\PengaturanModel();

        $pengaturan = $pengaturanModel->find(1);
        if (!$pengaturan) {
            return $this->response->setJSON(['status' => 'error', 'pesan' => 'Konfigurasi tidak ditemukan.']);
        }

        // Validasi: Hanya ambil antrian HARI INI, status = 0 (Antrian), dan percobaan < 3
        $hariIni = date('Y-m-d');
        $antrian = $notifikasiModel->where('status', 0)
                                   ->where('DATE(created_at)', $hariIni)
                                   ->where('coba_kirim <', 3)
                                   ->findAll();

        if (empty($antrian)) {
            return $this->response->setJSON(['status' => 'success', 'pesan' => 'Tidak ada antrian aktif untuk hari ini.']);
        }

        $url = $pengaturan['gowa_url'] . '/send/message';
        $auth = base64_encode($pengaturan['gowa_auth']);
        
        $terkirim = 0;
        $gagal = 0;

        foreach ($antrian as $row) {
            // Format Nomor HP (Ubah 08 jadi 628)
            $no_hp = $row['no_tujuan'];
            if (substr($no_hp, 0, 1) == '0') {
                $no_hp = '62' . substr($no_hp, 1);
            }

            $dataPost = [
                'phone'   => $no_hp,
                'message' => $row['pesan']
            ];

            // Eksekusi cURL ke GoWA
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($dataPost));
            curl_setopt($ch, CURLOPT_HTTPHEADER, [
                'Authorization: Basic ' . $auth,
                'Content-Type: application/json',
                'X-Device-Id: tard_sbb' 
            ]);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_TIMEOUT, 10); // Batasi timeout agar tidak hang
            $result = curl_exec($ch);
            $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
            curl_close($ch);

            // Cek apakah API GoWA merespon sukses (HTTP 200)
            if ($httpCode == 200) {
                // Update status jadi 1 (Sukses)
                $notifikasiModel->update($row['id'], ['status' => 1]);
                $terkirim++;
            } else {
                // Jika gagal, tambah counter coba_kirim
                $coba_baru = $row['coba_kirim'] + 1;
                
                // Jika ini adalah kegagalan ke-3 (nilai menjadi 3), ubah status jadi 3 (Gagal Permanen)
                $status_baru = ($coba_baru >= 3) ? 3 : 0; 
                
                $notifikasiModel->update($row['id'], [
                    'coba_kirim' => $coba_baru,
                    'status'     => $status_baru
                ]);
                $gagal++;
            }
        }

        return $this->response->setJSON([
            'status' => 'success', 
            'pesan'  => "Proses selesai. Terkirim: $terkirim, Gagal: $gagal"
        ]);
    }
}