<?php
require_once __DIR__ . '/includes/db_config.php';
require_once __DIR__ . '/includes/PHPMailer/src/PHPMailer.php';
require_once __DIR__ . '/includes/PHPMailer/src/Exception.php';
require_once __DIR__ . '/includes/PHPMailer/src/SMTP.php';
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
$config_mail = include __DIR__ . '/includes/config_mail.php';

// Отримуємо поточний домен
$current_domain = "https://" . $_SERVER['HTTP_HOST'];

// Відладка: логування початку виконання
error_log("Запуск send_schedule_updates.php: " . date('Y-m-d H:i:s'));

// Знаходимо оновлені записи в таблиці schedules (за останні 24 години)
$sql = "SELECT s.group_id, g.name AS group_name 
        FROM schedules s 
        JOIN `groups` g ON s.group_id = g.id 
        WHERE s.created_at >= NOW() - INTERVAL 1 DAY 
        GROUP BY s.group_id";
$result = $conn->query($sql);

if (!$result) {
    error_log("Помилка SQL-запиту в send_schedule_updates.php: " . $conn->error);
    die("Помилка сервера. Перевірте логи.");
}

$updates = [];
while ($row = $result->fetch_assoc()) {
    $updates[$row['group_id']] = $row['group_name'];
}

// Відладка: логування знайдених оновлень
error_log("Знайдено оновлень для груп: " . count($updates));

if (empty($updates)) {
    error_log("Немає оновлень у таблиці schedules за останні 24 години.");
    exit;
}

foreach ($updates as $group_id => $group_name) {
    // Отримуємо всіх підтверджених підписників для цієї групи
    $sql = "SELECT email FROM subscriptions WHERE group_id = ? AND is_verified = 1";
    $stmt = $conn->prepare($sql);
    if ($stmt === false) {
        error_log("Помилка підготовки запиту для підписників group_id $group_id: " . $conn->error);
        continue;
    }
    $stmt->bind_param("i", $group_id);
    $stmt->execute();
    $subscribers = $stmt->get_result();

    // Відладка: логування кількості підписників
    error_log("Підписники для group_id $group_id: " . $subscribers->num_rows);

    if ($subscribers->num_rows == 0) {
        error_log("Немає підтверджених підписників для group_id $group_id");
        $stmt->close();
        continue;
    }

    while ($subscriber = $subscribers->fetch_assoc()) {
        $email = $subscriber['email'];
        $mail = new PHPMailer(true);
        try {
            // Налаштування сервера
            $mail->isSMTP();
            $mail->Host = $config_mail['host'];
            $mail->SMTPAuth = true;
            $mail->Username = $config_mail['username'];
            $mail->Password = $config_mail['password'];
            $mail->SMTPSecure = $config_mail['encryption'];
            $mail->Port = $config_mail['port'];
            $mail->CharSet = 'UTF-8';

            // Відправник і отримувач
            $mail->setFrom($config_mail['from_email'], $config_mail['from_name']);
            $mail->addAddress($email);

            // Зміст листа
            $group_name = htmlspecialchars($group_name);
            $mail->isHTML(true);
            $mail->Subject = "Оновлення розкладу для групи $group_name";
            $unsubscribe_link = "$current_domain/unsubscribe.php?email=" . urlencode($email) . "&group_id=" . $group_id;
            $schedule_link = "$current_domain/rozklad/group_schedule.php?id=$group_id";
            $mail->Body = "
                <h2>Оновлення розкладу</h2>
                <p>Привіт! Розклад для групи <strong>$group_name</strong> було оновлено.</p>
                <p>Перегляньте оновлення за <a href='$schedule_link'>посиланням</a>.</p>
                <p>Щоб відписатися від розсилки, натисніть <a href='$unsubscribe_link'>тут</a>.</p>
                <p>Якщо ви не підписувалися, проігноруйте цей лист.</p>
            ";
            $mail->AltBody = "Оновлення розкладу для групи $group_name:\nПереглянути розклад: $schedule_link\nВідписатися: $unsubscribe_link";

            $mail->send();
            error_log("Лист про оновлення розкладу надіслано для email $email, group_id $group_id");
        } catch (Exception $e) {
            error_log("Помилка надсилання листа про оновлення для email $email, group_id $group_id: {$mail->ErrorInfo}");
        }
    }
    $stmt->close();
}

$conn->close();
?>