<?php
// cron/hr_leaves_notify_admin.php
declare(strict_types=1);

require_once __DIR__ . '/../inc/db.php';
require_once __DIR__ . '/../inc/mailer.php';
require_once __DIR__ . '/../inc/hr_leave_notifications.php';

$pdo = db();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

/**
 * نرسل للإدارة الطلبات الجديدة اللي ما تم إشعار الإدارة عنها بعد
 * (إن لم يكن عندك notified_admin_at بالجدول، بنستعمل لوق فقط بدون تحديث)
 */
$hasNotifiedAdminAt = false;
try {
  $cols = $pdo->query("SHOW COLUMNS FROM leave_requests")->fetchAll(PDO::FETCH_COLUMN, 0);
  $hasNotifiedAdminAt = in_array('notified_admin_at', $cols, true);
} catch (Throwable $e) {}

$sql = "
  SELECT id
  FROM leave_requests
  WHERE 1=1
";
if ($hasNotifiedAdminAt) {
  $sql .= " AND notified_admin_at IS NULL ";
}
$sql .= " ORDER BY id ASC LIMIT 50";

$ids = $pdo->query($sql)->fetchAll(PDO::FETCH_COLUMN);

$sent = 0; $failed = 0;

foreach ($ids as $id) {
  $id = (int)$id;

  try {
    // أهم سطر: مرّر ID فقط (int) وليس PDO
    $res = send_leave_to_admin($id);

    if (!empty($res['ok'])) {
      $sent++;
      if ($hasNotifiedAdminAt) {
        $st = $pdo->prepare("UPDATE leave_requests SET notified_admin_at=NOW() WHERE id=? AND notified_admin_at IS NULL");
        $st->execute([$id]);
      }
    } else {
      $failed++;
      $err = (string)($res['err'] ?? 'unknown');
      @file_put_contents(__DIR__ . '/cron_mail_error.log', date('Y-m-d H:i:s')." notify_admin FAIL id={$id} err={$err}\n", FILE_APPEND);
    }
  } catch (Throwable $e) {
    $failed++;
    @file_put_contents(__DIR__ . '/cron_mail_error.log', date('Y-m-d H:i:s')." notify_admin EXCEPTION id={$id} err=".$e->getMessage()."\n", FILE_APPEND);
  }
}

echo "notify_admin sent={$sent} failed={$failed}\n";