<?php
// Sesuaikan path ke file koneksi Anda
include('include/koneksi.php');

// Atur zona waktu yang benar
date_default_timezone_set('Asia/Makassar');

// 1. Ambil Konfigurasi Notifikasi & Token (Cukup satu kali)
$config_q = $koneksi->query("SELECT status_notifikasi, pesan_notifikasi FROM tbl_notif LIMIT 1");
$config = $config_q->fetch_assoc();

// Hentikan skrip jika notifikasi tidak aktif
if (!$config || $config['status_notifikasi'] !== 'aktif') {
    echo "Cron Notifikasi: Fitur tidak aktif.\n";
    exit;
}

$token_q = $koneksi->query("SELECT token FROM tbl_token LIMIT 1");
$token_data = $token_q->fetch_assoc();
if (!$token_data) {
    echo "Cron Notifikasi: Token Fonnte tidak ditemukan.\n";
    exit;
}
$authorizationToken = $token_data['token'];

echo "Cron Notifikasi: Mencari pelanggan untuk dikirimi pengingat...\n";

// 2. Query Utama: Cari pelanggan yang memenuhi salah satu dari tiga kondisi
//    - (H-4): Jatuh tempo 4 hari lagi DAN notifikasi ke-1 belum terkirim
//    - (H-2): Jatuh tempo 2 hari lagi DAN notifikasi ke-2 belum terkirim
//    - (Hari H): Jatuh tempo hari ini DAN notifikasi ke-3 belum terkirim
$stmt = $koneksi->prepare(
    "SELECT p.nama_pelanggan, p.no_telp, p.jatuh_tempo, t.id_tagihan, t.jml_bayar, t.notif_terkirim
     FROM tb_pelanggan p
     JOIN tb_tagihan t ON p.id_pelanggan = t.id_pelanggan
     WHERE 
         t.status_bayar = 0 AND (
            (p.jatuh_tempo = CURDATE() + INTERVAL 4 DAY AND t.notif_terkirim = 0) OR
            (p.jatuh_tempo = CURDATE() + INTERVAL 2 DAY AND t.notif_terkirim = 1) OR
            (p.jatuh_tempo = CURDATE() AND t.notif_terkirim = 2)
         )"
);

$stmt->execute();
$result = $stmt->get_result();

if ($result->num_rows === 0) {
    echo "Cron Notifikasi: Tidak ada pelanggan yang perlu dinotifikasi hari ini.\n";
    exit;
}

echo "Cron Notifikasi: Ditemukan " . $result->num_rows . " pelanggan.\n";

// Siapkan statement untuk update status notifikasi
$stmt_update = $koneksi->prepare("UPDATE tb_tagihan SET notif_terkirim = notif_terkirim + 1 WHERE id_tagihan = ?");

// 3. Proses setiap pelanggan yang ditemukan
while ($data = $result->fetch_assoc()) {
    echo "Mengirim notifikasi ke: " . $data['nama_pelanggan'] . "\n";

    // Gunakan str_replace dengan array agar lebih rapi
    $placeholders = ['$nama', '$jatuh_tempo', '$tagihan', '$no_telp'];
    $values = [
        $data['nama_pelanggan'],
        date('d F Y', strtotime($data['jatuh_tempo'])),
        number_format($data['jml_bayar'], 0, ",", "."),
        $data['no_telp']
    ];
    $pesan_final = str_replace($placeholders, $values, $config['pesan_notifikasi']);

    // Kirim Notifikasi via Fonnte
    $curl = curl_init();
    curl_setopt_array($curl, [
        CURLOPT_URL => 'https://api.fonnte.com/send',
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT => 30,
        CURLOPT_CUSTOMREQUEST => 'POST',
        CURLOPT_POSTFIELDS => [
            'target' => $data['no_telp'],
            'message' => $pesan_final,
            'countryCode' => '62',
        ],
        CURLOPT_HTTPHEADER => [
            'Authorization: ' . $authorizationToken
        ],
    ]);
    curl_exec($curl);
    curl_close($curl);
    
    // Update status notifikasi di database (notif_terkirim akan bertambah 1)
    $stmt_update->bind_param("i", $data['id_tagihan']);
    $stmt_update->execute();
}

$stmt->close();
$stmt_update->close();
$koneksi->close();

echo "Cron Notifikasi: Selesai.\n";
?>
