<?php
session_start();

require_once '../includes/db_config.php';
require_once '../includes/PHPMailer/src/PHPMailer.php';
require_once '../includes/PHPMailer/src/Exception.php';
require_once '../includes/PHPMailer/src/SMTP.php';

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

/* ======= Доступ для редакторів (адмін/викладач) ======= */
$is_authorized = isset($_SESSION['user_id']) && in_array(($_SESSION['role'] ?? ''), ['admin','teacher'], true);
/* ====================================================== */

/* ================== Dompdf 2.x loader ================== */
$EXPORT_TO_PDF = isset($_GET['export']) && $_GET['export'] === 'pdf';
$dompdf = null;

if ($EXPORT_TO_PDF) {
    $base = realpath(__DIR__ . '/../includes/dompdf');
    $paths = [
        $base . '/autoload.php',
        $base . '/autoload.inc.php',
        $base . '/vendor/autoload.php'
    ];
    $loaded = false;
    foreach ($paths as $p) {
        if (is_file($p)) { require_once $p; $loaded = true; break; }
    }
    if (!$loaded) {
        die("Dompdf не знайдено. Очікував autoload.php або vendor/autoload.php у /includes/dompdf/");
    }

    $opts = new Dompdf\Options();
    $opts->set('defaultFont', 'DejaVu Sans');
    $opts->set('isRemoteEnabled', true);
    $opts->set('isHtml5ParserEnabled', true);
    $opts->set('chroot', realpath(__DIR__ . '/..'));

    $dompdf = new Dompdf\Dompdf($opts);
}
/* ======================================================= */

$config_mail = include '../includes/config_mail.php';

/** Поточний домен (http/https, враховує проксі) */
$scheme = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off')
    || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') ? 'https' : 'http';
$host = $_SERVER['HTTP_HOST'] ?? 'localhost';
$current_domain = $scheme . '://' . $host;

/** ID групи */
$group_id = isset($_GET['id']) ? intval($_GET['id']) : 0;
if ($group_id <= 0) {
    die("Група не вказана. Перевір URL або звернися до адміністратора.");
}

/** Перевірка існування групи */
$sql = "SELECT COUNT(*) as count FROM `groups` WHERE id = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("i", $group_id);
$stmt->execute();
$result = $stmt->get_result()->fetch_assoc();
if (empty($result) || intval($result['count']) === 0) {
    die("Група не знайдена. Перевір URL або звернися до адміністратора.");
}
$stmt->close();

/** Назва групи */
$sql = "SELECT name FROM `groups` WHERE id = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("i", $group_id);
$stmt->execute();
$group = $stmt->get_result()->fetch_assoc();
$stmt->close();

/** Часові слоти (динамічні або дефолтні) */
$time_slots = [];
$sql = "SELECT lesson_number, start_time, end_time FROM lesson_times WHERE group_id = ? ORDER BY lesson_number";
$stmt = $conn->prepare($sql);
$stmt->bind_param("i", $group_id);
$stmt->execute();
$res = $stmt->get_result();
while ($slot = $res->fetch_assoc()) {
    $start_time = substr((string)$slot['start_time'], 0, 5);
    $end_time   = substr((string)$slot['end_time'], 0, 5);
    $time_slots[(int)$slot['lesson_number']] = sprintf("%s–%s", $start_time, $end_time);
}
$stmt->close();

if (empty($time_slots)) {
    $time_slots = [
        1 => '9:00–9:45',
        2 => '9:55–10:40',
        3 => '10:50–11:35',
        4 => '11:55–12:40',
        5 => '12:50–13:35',
        6 => '13:45–14:30',
        7 => '14:40–15:25',
        8 => '15:30–16:15'
    ];
}

/** Дні тижня */
$days_of_week = ['Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб'];

/** Обраний день */
$selected_day = isset($_GET['day']) ? trim((string)$_GET['day']) : '';
if ($selected_day !== '' && !in_array($selected_day, $days_of_week, true)) {
    $selected_day = '';
}

/** Розклад */
$schedules = [];
$sql = "SELECT * FROM schedules WHERE group_id = ? ORDER BY day_of_week, time_slot";
$stmt = $conn->prepare($sql);
$stmt->bind_param("i", $group_id);
$stmt->execute();
$res = $stmt->get_result();
while ($schedule = $res->fetch_assoc()) {
    $schedules[$schedule['day_of_week']][$schedule['time_slot']] = $schedule;
}
$stmt->close();

/** Обробка підписки */
$subscription_msg = '';
if (isset($_POST['subscribe'])) {
    $email = $_POST['subscription_email'] ?? '';
    $group_id_post = intval($_POST['group_id'] ?? 0);

    if ($group_id_post !== $group_id) {
        $subscription_msg = "<p class='text-center text-danger'>Невірні дані форми.</p>";
    } elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $subscription_msg = "<p class='text-center text-danger'>Невірний формат email.</p>";
    } else {
        $email = trim((string)$email);

        $sql = "SELECT COUNT(*) as count FROM subscriptions WHERE email = ? AND group_id = ?";
        $stmt = $conn->prepare($sql);
        $stmt->bind_param("si", $email, $group_id);
        $stmt->execute();
        $row = $stmt->get_result()->fetch_assoc();
        $stmt->close();

        if (!empty($row) && intval($row['count']) > 0) {
            $subscription_msg = "<p class='text-center text-danger'>Ви вже підписані на оновлення цієї групи.</p>";
        } else {
            $verification_token = bin2hex(random_bytes(16));

            $sql = "INSERT INTO subscriptions (email, group_id, verification_token, is_verified) VALUES (?, ?, ?, 0)";
            $stmt = $conn->prepare($sql);
            $stmt->bind_param("sis", $email, $group_id, $verification_token);

            if ($stmt->execute()) {
                $stmt->close();

                $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);

                    $mail->isHTML(true);
                    $mail->Subject = 'Підтвердження підписки на оновлення розкладу';

                    $verification_link = $current_domain . '/verify_subscription.php?token=' . urlencode($verification_token);
                    $unsubscribe_link  = $current_domain . '/unsubscribe.php?email=' . urlencode($email) . '&group_id=' . $group_id;
                    $group_name_safe   = htmlspecialchars((string)($group['name'] ?? ''), ENT_QUOTES, 'UTF-8');

                    $mail->Body = "
                        <h2>Підтвердження підписки</h2>
                        <p>Ви підписалися на оновлення розкладу для групи <strong>{$group_name_safe}</strong>.</p>
                        <p>Будь ласка, перейдіть за посиланням, щоб підтвердити підписку:</p>
                        <p><a href='{$verification_link}'>Підтвердити підписку</a></p>
                        <p>Якщо ви не хочете отримувати оновлення, ви можете <a href='{$unsubscribe_link}'>відписатися</a>.</p>
                        <p>Якщо ви не підписувалися, проігноруйте цей лист.</p>
                    ";
                    $mail->AltBody = "Підтвердження підписки на оновлення розкладу для групи {$group_name_safe}: {$verification_link}\nВідписатися: {$unsubscribe_link}";

                    $mail->send();
                    $subscription_msg = "<p class='text-center text-success'>Ви успішно підписалися! Перевірте пошту для підтвердження.</p>";
                } catch (Exception $e) {
                    $subscription_msg = "<p class='text-center text-danger'>Помилка надсилання листа: {$mail->ErrorInfo}</p>";
                    error_log("Помилка надсилання листа підписки: {$mail->ErrorInfo}");
                }
            } else {
                $subscription_msg = "<p class='text-center text-danger'>Помилка підписки: " . htmlspecialchars((string)$stmt->error, ENT_QUOTES, 'UTF-8') . "</p>";
                error_log("Помилка підписки: " . $stmt->error);
                $stmt->close();
            }
        }
    }
}

/** Якщо просили PDF — генеруємо */
if ($EXPORT_TO_PDF && $dompdf) {
    $group_name = htmlspecialchars((string)($group['name'] ?? ''), ENT_QUOTES, 'UTF-8');

    ob_start();
    ?>
    <!DOCTYPE html>
    <html lang="uk">
    <head>
        <meta charset="UTF-8">
        <title>Розклад групи <?= $group_name; ?></title>
        <style>
            *{box-sizing:border-box}
            body{font-family: DejaVu Sans, DejaVuSans, Arial, sans-serif; font-size:12px; color:#111; margin:0; padding:0;}
            h1{font-size:18px; margin:0 0 12px;}
            .day{margin:10px 0 16px; page-break-inside:avoid;}
            .day h2{font-size:14px; margin:0 0 6px;}
            table{width:100%; border-collapse:collapse; table-layout: fixed;}
            th,td{border:1px solid #999; padding:6px 5px; vertical-align:top; word-wrap:break-word;}
            th{background:#f2f2f2; text-align:left;}
            .nowrap{white-space:nowrap;}
            .muted{color:#666;}
            .replacement{color:#c00; font-weight:700;}
        </style>
    </head>
    <body>
    <h1>Розклад групи «<?= $group_name; ?>»</h1>

    <?php foreach ($days_of_week as $day): ?>
        <div class="day">
            <h2><?= htmlspecialchars($day, ENT_QUOTES, 'UTF-8'); ?></h2>
            <table>
                <thead>
                <tr>
                    <th class="nowrap" style="width:28px">№</th>
                    <th class="nowrap" style="width:70px">Час</th>
                    <th>Предмет</th>
                    <th>Викладач</th>
                    <th class="nowrap" style="width:45px">Каб.</th>
                    <th style="width:90px">Заміна</th>
                    <th>Коментар викладача</th>
                    <th>Посилання</th>
                </tr>
                </thead>
                <tbody>
                <?php for ($lesson = 1; $lesson <= 8; $lesson++): ?>
                    <?php
                    $time_slot = $time_slots[$lesson] ?? '';
                    $schedule = $time_slot && isset($schedules[$day][$time_slot]) ? $schedules[$day][$time_slot] : null;
                    ?>
                    <tr>
                        <td class="nowrap"><?= $lesson; ?></td>
                        <td class="nowrap"><?= htmlspecialchars((string)$time_slot, ENT_QUOTES, 'UTF-8'); ?></td>
                        <td><?= htmlspecialchars((string)($schedule['subject'] ?? ''), ENT_QUOTES, 'UTF-8'); ?></td>
                        <td><?= htmlspecialchars((string)($schedule['teacher'] ?? ''), ENT_QUOTES, 'UTF-8'); ?></td>
                        <td class="nowrap"><?= htmlspecialchars((string)($schedule['room'] ?? ''), ENT_QUOTES, 'UTF-8'); ?></td>
                        <td>
                            <?php if (!empty($schedule['replacement'])): ?>
                                <span class="replacement"><?= htmlspecialchars((string)$schedule['replacement'], ENT_QUOTES, 'UTF-8'); ?></span>
                            <?php else: ?>
                                <span class="muted">—</span>
                            <?php endif; ?>
                        </td>
                        <td>
                            <?php if (!empty($schedule['teacher_comment'])): ?>
                                <?= nl2br(htmlspecialchars((string)$schedule['teacher_comment'], ENT_QUOTES, 'UTF-8')); ?>
                            <?php else: ?>
                                <span class="muted">—</span>
                            <?php endif; ?>
                        </td>
                        <td>
                            <?php if (!empty($schedule['lesson_link'])): ?>
                                <?= htmlspecialchars((string)$schedule['lesson_link'], ENT_QUOTES, 'UTF-8'); ?>
                            <?php else: ?>
                                <span class="muted">—</span>
                            <?php endif; ?>
                        </td>
                    </tr>
                <?php endfor; ?>
                </tbody>
            </table>
        </div>
    <?php endforeach; ?>

    <p class="muted">Згенеровано: <?= date('d.m.Y H:i'); ?></p>
    </body>
    </html>
    <?php
    $html = ob_get_clean();

    $dompdf->loadHtml($html, 'UTF-8');
    $dompdf->setPaper('A4', 'portrait');
    $dompdf->render();

    $safeName = preg_replace('~[^\p{L}\p{N}\s\-_]~u', '', (string)($group['name'] ?? 'group'));
    $fileName = 'Rozklad_' . trim((string)$safeName) . '.pdf';
    $dompdf->stream($fileName, ['Attachment' => true]);
    exit;
}

/* ===== ПОДГОТОВКА ДЛЯ header.php ===== */
$siteName  = 'Розклад занять';
$pageTitle = 'Розклад групи ' . (string)($group['name'] ?? '');
$pageCss   = [
    'https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css',
    '/css/rozklad-schedule.css?v=3'
];

include '../includes/header.php';
?>

<main class="page">
  <div class="kp-container">
    <div class="container my-3 my-sm-4 schedule-wrap">
        <div class="d-flex flex-column flex-sm-row align-items-sm-center gap-2 justify-content-between">
            <h1 class="h4 h3-sm mb-0">
                Розклад групи <span class="text-primary"><?php echo htmlspecialchars((string)($group['name'] ?? ''), ENT_QUOTES, 'UTF-8'); ?></span>
            </h1>

            <div class="d-flex gap-2 flex-wrap">
                <a class="btn btn-outline-secondary btn-sm d-inline-flex align-items-center" href="/index.php">
                    ← До списку груп
                </a>

                <a class="btn btn-primary btn-sm" href="?id=<?php echo (int)$group_id; ?>&export=pdf">
                    Завантажити PDF
                </a>

                <?php if ($is_authorized): ?>
                    <a class="btn btn-warning btn-sm" href="/admin/dashboard_schedule.php?group_id=<?php echo (int)$group_id; ?>">
                        Редагувати розклад
                    </a>
                <?php endif; ?>
            </div>
        </div>

        <?php if (!empty($subscription_msg)) echo $subscription_msg; ?>

        <?php if (isset($_GET['saved']) && $_GET['saved'] === '1'): ?>
            <div class="alert alert-success mt-3" role="alert">
                Зміни збережено.
            </div>
        <?php endif; ?>

        <div class="subscription-form card border-2 mt-3">
            <div class="card-body">
                <form method="POST" class="row g-2 g-sm-3 align-items-center">
                    <div class="col-12 col-sm-7 col-md-8">
                        <label for="subscription_email" class="form-label mb-1">Підписатися на оновлення розкладу (введіть email):</label>
                        <input type="email" id="subscription_email" name="subscription_email" class="form-control"
                               placeholder="example@domain.com" required inputmode="email" autocomplete="email">
                        <input type="hidden" name="group_id" value="<?php echo (int)$group_id; ?>">
                    </div>
                    <div class="col-12 col-sm-auto">
                        <button type="submit" name="subscribe" class="btn btn-success w-100 w-sm-auto">
                            Підписатися
                        </button>
                    </div>
                </form>
            </div>
        </div>

        <style>
            .day-buttons{display:flex;flex-wrap:wrap;gap:.5rem}
            .day-buttons .btn{min-width:56px;font-weight:700;letter-spacing:.3px}
            .day-view-title{display:flex;align-items:center;justify-content:space-between;gap:.75rem;flex-wrap:wrap}
            .day-title-left{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}
            .day-title-badge{font-weight:800;letter-spacing:.4px}
            .edit-day-btn{white-space:nowrap}
        </style>

        <?php if ($selected_day === ''): ?>
            <div class="mt-3 card border-2">
                <div class="card-body">
                    <div class="d-flex flex-column gap-2">
                        <div class="fw-semibold">Оберіть день:</div>
                        <div class="day-buttons">
                            <?php foreach ($days_of_week as $day): ?>
                                <a class="btn btn-outline-primary"
                                   href="?id=<?php echo (int)$group_id; ?>&day=<?php echo urlencode($day); ?>">
                                    <?php echo htmlspecialchars($day, ENT_QUOTES, 'UTF-8'); ?>
                                </a>
                            <?php endforeach; ?>
                        </div>

                        <div class="text-body-secondary small mt-1">
                            Після вибору дня відкриється розклад тільки цього дня.
                        </div>
                    </div>
                </div>
            </div>
        <?php else: ?>
            <div class="mt-3">
                <div class="day-view-title mb-2">
                    <div class="day-title-left">
                        <h2 class="h5 mb-0">
                            <span class="badge bg-primary day-title-badge">
                                <?php echo htmlspecialchars($selected_day, ENT_QUOTES, 'UTF-8'); ?>
                            </span>
                        </h2>

                        <?php if ($is_authorized): ?>
                            <a class="btn btn-warning btn-sm edit-day-btn"
                               href="edit_day.php?id=<?php echo (int)$group_id; ?>&day=<?php echo urlencode($selected_day); ?>">
                                Редагувати день
                            </a>
                        <?php endif; ?>
                    </div>
                </div>

                <div class="card border-2">
                    <div class="card-body p-2 p-sm-3">
                        <div class="table-responsive">
                            <table class="table table-striped table-hover schedule-table align-middle mb-0">
                                <thead class="sticky-header">
                                <tr>
                                    <th>№</th>
                                    <th>Час</th>
                                    <th>Предмет</th>
                                    <th>Викладач</th>
                                    <th>Каб.</th>
                                    <th>Заміна</th>
                                    <th>Коментар викладача</th>
                                    <th>Посилання</th>
                                </tr>
                                </thead>
                                <tbody>
                                <?php for ($lesson = 1; $lesson <= 8; $lesson++): ?>
                                    <?php
                                    $time_slot = $time_slots[$lesson] ?? '';
                                    $schedule = $time_slot && isset($schedules[$selected_day][$time_slot]) ? $schedules[$selected_day][$time_slot] : null;
                                    $attach = (string)($schedule['attachment_path'] ?? '');
                                    ?>
                                    <tr>
                                        <td data-label="№"><?php echo $lesson; ?></td>
                                        <td data-label="Час"><?php echo htmlspecialchars((string)$time_slot, ENT_QUOTES, 'UTF-8'); ?></td>
                                        <td data-label="Предмет"><?php echo htmlspecialchars((string)($schedule['subject'] ?? ''), ENT_QUOTES, 'UTF-8'); ?></td>
                                        <td data-label="Викладач"><?php echo htmlspecialchars((string)($schedule['teacher'] ?? ''), ENT_QUOTES, 'UTF-8'); ?></td>
                                        <td data-label="Каб."><?php echo htmlspecialchars((string)($schedule['room'] ?? ''), ENT_QUOTES, 'UTF-8'); ?></td>
                                        <td data-label="Заміна">
                                            <?php if (!empty($schedule['replacement'])): ?>
                                                <span class="text-danger fw-semibold">
                                                    <?php echo htmlspecialchars((string)$schedule['replacement'], ENT_QUOTES, 'UTF-8'); ?>
                                                </span>
                                            <?php else: ?>
                                                <span class="text-body-secondary">–</span>
                                            <?php endif; ?>
                                        </td>
                                        <td data-label="Коментар викладача">
                                            <?php if (!empty($schedule['teacher_comment'])): ?>
                                                <div class="small"><?php echo nl2br(htmlspecialchars((string)$schedule['teacher_comment'], ENT_QUOTES, 'UTF-8')); ?></div>
                                            <?php else: ?>
                                                <span class="text-body-secondary">–</span>
                                            <?php endif; ?>

                                            <?php if ($attach !== ''): ?>
                                                <div class="mt-1">
                                                    <a class="btn btn-outline-secondary btn-sm" href="<?php echo htmlspecialchars($attach, ENT_QUOTES, 'UTF-8'); ?>" target="_blank" rel="noopener">
                                                        📎 Файл
                                                    </a>
                                                </div>
                                            <?php endif; ?>
                                        </td>
                                        <td data-label="Посилання">
                                            <?php if (!empty($schedule['lesson_link'])): ?>
                                                <a href="<?php echo htmlspecialchars((string)$schedule['lesson_link'], ENT_QUOTES, 'UTF-8'); ?>" target="_blank" rel="noopener" class="btn btn-primary btn-sm">
                                                    Перейти
                                                </a>
                                            <?php else: ?>
                                                <span class="text-body-secondary">–</span>
                                            <?php endif; ?>
                                        </td>
                                    </tr>
                                <?php endfor; ?>
                                </tbody>
                            </table>
                        </div>
                    </div>
                </div>

                <div class="mt-3 d-grid">
                    <a class="btn btn-outline-secondary" href="?id=<?php echo (int)$group_id; ?>">
                        ← Назад до вибору дня
                    </a>
                </div>
            </div>
        <?php endif; ?>
    </div>
  </div>
</main>

<?php include '../includes/footer.php'; ?>

<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>

</body>
</html>
