<?php
// Pages/lib_notify.php

/**
 * Normalisasi nomor & buat link wa.me
 * Menerima: 08xxxxxxxxxx / +628xxxxxxxxx / 628xxxxxxxxx
 * Mengembalikan: https://wa.me/628xxxx...?text=...
 */
function wa_deeplink(string $phone, string $text): string {
  $digits = preg_replace('/\D+/', '', $phone); // keep angka saja

  // 08xxxx -> 628xxxx
  if (strpos($digits, '0') === 0) {
    $digits = '62' . substr($digits, 1);
  }
  // +628xxxx yang sudah berubah jadi 628xxxx juga aman
  if (strpos($digits, '62') !== 0) {
    // fallback terakhir: paksa ke 62 jika tidak ada kode negara
    $digits = '62' . ltrim($digits, '0');
  }

  return 'https://wa.me/' . $digits . '?text=' . rawurlencode($text);
}

/**
 * Template pesan status peminjaman
 */
function build_status_message(string $fullname, string $judulBuku, string $status, ?string $jatuhTempo = null): string {
  $baris = [];
  $baris[] = "Halo {$fullname},";
  $baris[] = "Status peminjaman buku \"{$judulBuku}\" kini: *" . ucfirst($status) . "*.";

  if ($status === 'dipinjam' && $jatuhTempo) {
    $baris[] = "Jatuh tempo: {$jatuhTempo}.";
    $baris[] = "Mohon dikembalikan tepat waktu ya 🙏";
  }
  if ($status === 'diterima') {
    $baris[] = "Silakan ambil buku di perpustakaan.";
  }
  if ($status === 'ditolak') {
    $baris[] = "Silakan hubungi admin untuk info lebih lanjut.";
  }
  if ($status === 'dikembalikan') {
    $baris[] = "Terima kasih sudah mengembalikan 🙌";
  }

  $baris[] = "\n— Pustakaia";
  return implode("\n", $baris);
}

/**
 * Template pesan pengingat (opsional dipakai manual)
 */
function build_reminder_message(string $fullname, string $judulBuku, string $jenis, string $tglInfo): string {
  if ($jenis === 'H-1') {
    return "Halo {$fullname},\nPengingat H-1: Buku \"{$judulBuku}\" jatuh tempo besok ({$tglInfo}).\nMohon dikembalikan tepat waktu ya 🙏\n— Pustakaia";
  }
  // terlambat
  return "Halo {$fullname},\nPeminjaman buku \"{$judulBuku}\" sudah melewati jatuh tempo ({$tglInfo}).\nMohon segera dikembalikan. Terima kasih 🙏\n— Pustakaia";
}
// lib/lib_notify.php

/**
 * Kirim notifikasi ke 1 user.
 * $type: 'STATUS_UPDATE' | 'REMINDER_H1' | 'REMINDER_OVERDUE' | 'BROADCAST'
 * $ref_date: pakai 'YYYY-MM-DD' untuk reminder harian (biar unik per hari). Untuk broadcast tidak wajib.
 */
function send_notification(PDO $pdo, int $user_id, ?int $borrow_id, string $type, string $message, ?string $ref_date = null): bool {
  $sql = "INSERT INTO notifications (user_id, borrow_id, type, message, ref_date, is_read, created_at)
          VALUES (:uid, :bid, :type, :msg, :rdate, 0, NOW())";
  try {
    $stmt = $pdo->prepare($sql);
    return $stmt->execute([
      ':uid'   => $user_id,
      ':bid'   => $borrow_id,
      ':type'  => $type,
      ':msg'   => $message,
      ':rdate' => $ref_date
    ]);
  } catch (PDOException $e) {
    // kalau kena UNIQUE utk reminder harian, biarkan saja (anggap sudah terkirim)
    return false;
  }
}

/**
 * Kirim notifikasi broadcast ke semua user (bukan admin).
 * Ubah query jika kamu ingin termasuk admin juga.
 */
function send_broadcast_to_all_users(PDO $pdo, string $message, string $type = 'BROADCAST'): void {
  // Ambil semua user non-admin (menoleransi variasi huruf besar/kecil)
  $q = $pdo->query("SELECT id FROM users WHERE LOWER(role) <> 'admin'");
  $userIds = $q->fetchAll(PDO::FETCH_COLUMN);

  $sql  = "INSERT INTO notifications (user_id, borrow_id, type, message, ref_date, is_read, created_at)
           VALUES (:uid, NULL, :type, :msg, NULL, 0, NOW())";
  $stmt = $pdo->prepare($sql);

  foreach ($userIds as $uid) {
    try {
      $stmt->execute([
        ':uid'  => (int)$uid,
        ':type' => $type,      // 'BROADCAST'
        ':msg'  => $message
      ]);
    } catch (Throwable $e) {
      // kalau ada user gagal, lewati & lanjut ke user berikutnya
    }
  }
}
