<?php
// admin/admin_father.php — управління батьками та зв’язками «батько ↔ учень» (ADMIN only)
declare(strict_types=1);

session_start();
require_once __DIR__ . '/../includes/db_connect.php';

/* Поточна сторінка для навігації */
$current_file = basename($_SERVER['PHP_SELF'] ?? 'admin_father.php');

/* ===== Доступ ===== */
$role = (string)($_SESSION['role'] ?? '');
$is_admin   = ($role === 'admin');
$is_teacher = ($role === 'teacher');

if (!isset($_SESSION['user_id']) || !in_array($role, ['admin','teacher'], true)) {
    header("Location: ../index.php");
    exit();
}

$user_id   = (int)$_SESSION['user_id'];
$full_name = $_SESSION['full_name'] ?? ($is_teacher ? 'Викладач' : 'Адміністратор');

/* ===== CSRF ===== */
if (empty($_SESSION['csrf_token'])) {
    $_SESSION['csrf_token'] = bin2hex(random_bytes(16));
}
$CSRF = $_SESSION['csrf_token'];
function csrf_check(?string $token): bool {
    return hash_equals($_SESSION['csrf_token'] ?? '', (string)$token);
}

/* ===== Хелпер екранування ===== */
function h(?string $s): string {
    return htmlspecialchars((string)$s, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
}

/* ===== Пошта для активацій (як у admin_students.php) ===== */
require_once __DIR__ . '/../includes/PHPMailer/src/PHPMailer.php';
require_once __DIR__ . '/../includes/PHPMailer/src/SMTP.php';
require_once __DIR__ . '/../includes/PHPMailer/src/Exception.php';
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
$config_mail = require __DIR__ . '/../includes/config_mail.php';

/* ===== Flash (PRG) ===== */
function flash_set($k,$v){ $_SESSION['flash'][$k]=$v; }
function flash_get($k){ if(!isset($_SESSION['flash'][$k])) return null; $m=$_SESSION['flash'][$k]; unset($_SESSION['flash'][$k]); return $m; }

/* ===== Хост і посилання на активацію ===== */
$scheme = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https' : 'http';
$host   = $_SERVER['HTTP_HOST'] ?? 'localhost';
function build_activation_link(string $host, string $scheme, string $code): string {
    return $scheme . '://' . $host . '/activate.php?code=' . urlencode($code);
}

/* ===== Надіслати лист активації (для батьків) ===== */
function send_activation_mail(array $cfg, string $toEmail, string $toName, string $link): bool {
    $mail = new PHPMailer(true);
    try {
        $mail->isSMTP();
        $mail->Host       = $cfg['host'];
        $mail->SMTPAuth   = true;
        $mail->Username   = $cfg['username'];
        $mail->Password   = $cfg['password'];
        $mail->SMTPSecure = $cfg['encryption'];
        $mail->Port       = $cfg['port'];

        $mail->CharSet = 'UTF-8';
        $mail->setFrom($cfg['from_email'], $cfg['from_name']);
        $mail->addAddress($toEmail, $toName);

        $mail->isHTML(true);
        $mail->Subject = 'Активація облікового запису';
        $safeName = htmlspecialchars($toName, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
        $safeLink = htmlspecialchars($link, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
        $mail->Body    = '<p>Вітаємо, ' . $safeName . '!</p>'
                       . '<p>Для активації облікового запису перейдіть за посиланням:</p>'
                       . '<p><a href="' . $safeLink . '">' . $safeLink . '</a></p>';
        $mail->AltBody = "Вітаємо, {$toName}!\nПерейдіть для активації: {$link}";
        return $mail->send();
    } catch (Exception $e) {
        return false;
    }
}

/* ===== Сервіс: перевірка/створення last_login_at ===== */
function column_exists(mysqli $conn, string $table, string $column): bool {
    $sql = "SELECT 1
            FROM information_schema.COLUMNS
            WHERE TABLE_SCHEMA = DATABASE()
              AND TABLE_NAME = ?
              AND COLUMN_NAME = ?
            LIMIT 1";
    $st = $conn->prepare($sql);
    if (!$st) return false;
    $st->bind_param('ss', $table, $column);
    $st->execute();
    $st->store_result();
    $ok = $st->num_rows > 0;
    $st->close();
    return $ok;
}
function ensure_column(mysqli $conn, string $table, string $column, string $definition): void {
    if (!column_exists($conn, $table, $column)) {
        $sql = "ALTER TABLE `{$conn->real_escape_string($table)}` ADD COLUMN `{$conn->real_escape_string($column)}` {$definition}";
        @$conn->query($sql);
    }
}
ensure_column($conn, 'users', 'last_login_at', 'DATETIME NULL DEFAULT NULL');

/* ===== Форматування дати/часу ===== */
function fmt_dt(?string $dt): string {
    if (!$dt) return '—';
    $ts = strtotime($dt);
    return $ts ? date('d.m.Y H:i', $ts) : '—';
}

/* ===== Список груп (у масив, щоби перевикористовувати) ===== */
$groups = [];
$groups_query  = "SELECT id, group_name FROM `groups` ORDER BY group_name ASC";
if ($gRes = $conn->query($groups_query)) {
    while ($g = $gRes->fetch_assoc()) {
        $groups[] = $g;
    }
}

/* ===== Обрана група (фільтр по групі учнів) ===== */
$selected_group_id = isset($_GET['group_id']) ? (int)$_GET['group_id'] : 0;

/* ===== Обробка POST (PRG) ===== */
if ($_SERVER['REQUEST_METHOD'] === 'POST') {

    // Вчителям — лише перегляд (як і просив: доступ до вкладки, без керування)
    if (!$is_admin) {
        flash_set('error', 'Недостатньо прав для виконання дії. Доступно лише адміністратору.');
        header("Location: admin_father.php" . ($selected_group_id ? '?group_id='.$selected_group_id : ''));
        exit();
    }

    if (!csrf_check($_POST['csrf_token'] ?? '')) {
        flash_set('error', 'Невірний CSRF-токен.');
        header("Location: admin_father.php" . ($selected_group_id ? '?group_id='.$selected_group_id : ''));
        exit();
    }

    /* --- Ручне додавання батька/матері + одразу зв’язки з дітьми --- */
    if (isset($_POST['manual_add_parent'])) {
        $new_name  = trim($_POST['new_full_name'] ?? '');
        $new_email = trim($_POST['new_email'] ?? '');
        $child_ids_raw = $_POST['child_ids'] ?? [];
        $child_ids = [];
        if (is_array($child_ids_raw)) {
            foreach ($child_ids_raw as $cid) {
                $cid = (int)$cid;
                if ($cid > 0) $child_ids[] = $cid;
            }
            $child_ids = array_values(array_unique($child_ids));
        }

        if ($new_name === '') {
            flash_set('error', 'Вкажіть ПІБ батька/матері.');
            header("Location: admin_father.php" . ($selected_group_id ? '?group_id='.$selected_group_id : ''));
            exit();
        }

        if ($new_email !== '') {
            if (!filter_var($new_email, FILTER_VALIDATE_EMAIL)) {
                flash_set('error', 'Некоректний email.');
                header("Location: admin_father.php" . ($selected_group_id ? '?group_id='.$selected_group_id : ''));
                exit();
            }
            if ($chk = $conn->prepare("SELECT id FROM users WHERE email = ?")) {
                $chk->bind_param("s", $new_email);
                $chk->execute();
                $chk->store_result();
                if ($chk->num_rows > 0) {
                    $chk->close();
                    flash_set('error', 'Користувач з таким email вже існує.');
                    header("Location: admin_father.php" . ($selected_group_id ? '?group_id='.$selected_group_id : ''));
                    exit();
                }
                $chk->close();
            }
        }

        $plain_pass = bin2hex(random_bytes(4)); // 8 символів
        $hash_pass  = password_hash($plain_pass, PASSWORD_DEFAULT);

        $active = 1;
        $activation_code = null;
        $email_to_store  = $new_email;

        if ($new_email === '') {
            $email_to_store = 'noemail+'.uniqid('', true).'@ej.local';
            $active = 1;
        } else {
            $active = 0;
            $activation_code = bin2hex(random_bytes(16));
        }

        if ($ins = $conn->prepare("INSERT INTO users (full_name, email, password, role, group_id, activation_code, active) VALUES (?, ?, ?, 'parent', NULL, ?, ?)")) {
            $ins->bind_param("ssssi", $new_name, $email_to_store, $hash_pass, $activation_code, $active);
            if ($ins->execute()) {
                $new_parent_id = $ins->insert_id;
                $ins->close();

                // Надіслати активаційний лист, якщо є email
                if ($new_email !== '') {
                    $link = build_activation_link($host, $scheme, $activation_code);
                    $okMail = send_activation_mail($config_mail, $new_email, $new_name, $link);
                    if ($okMail) {
                        flash_set('success', 'Батька/матір додано. Лист із активацією надіслано на '.$new_email.'.');
                    } else {
                        flash_set('error', 'Батька/матір додано, але лист із активацією надіслати не вдалося.');
                    }
                } else {
                    flash_set('success', 'Батьїтка/матір додано без email. Обліковий запис активний.');
                }

                // Одразу прив’язуємо до обраних учнів
                if (!empty($child_ids)) {
                    if ($linkStmt = $conn->prepare("INSERT IGNORE INTO parent_links(parent_id, student_id) VALUES (?, ?)")) {
                        foreach ($child_ids as $cid) {
                            $cid = (int)$cid;
                            if ($cid <= 0) continue;
                            // додаткова перевірка, що це студент
                            if ($chk = $conn->prepare("SELECT id FROM users WHERE id = ? AND role='student'")) {
                                $chk->bind_param("i", $cid);
                                $chk->execute();
                                $chk->store_result();
                                $isStudent = $chk->num_rows > 0;
                                $chk->close();
                            } else {
                                $isStudent = false;
                            }
                            if (!$isStudent) continue;

                            $linkStmt->bind_param("ii", $new_parent_id, $cid);
                            $linkStmt->execute();
                        }
                        $linkStmt->close();
                        $prev = flash_get('success');
                        $addMsg = ' Створено зв’язки з обраними учнями.';
                        if ($prev) {
                            flash_set('success', $prev . $addMsg);
                        } else {
                            flash_set('success', $addMsg);
                        }
                    }
                }

            } else {
                $ins->close();
                flash_set('error', 'Помилка збереження батька/матері.');
            }
        } else {
            flash_set('error', 'Помилка підготовки запиту вставки.');
        }

        header("Location: admin_father.php" . ($selected_group_id ? '?group_id='.$selected_group_id : ''));
        exit();
    }

    /* --- Повторна активація батька --- */
    if (isset($_POST['send_activation_parent'], $_POST['parent_id'])) {
        $pid = (int)$_POST['parent_id'];

        if ($q = $conn->prepare("SELECT id, full_name, email, active, COALESCE(activation_code, '') AS code FROM users WHERE id = ? AND role='parent'")) {
            $q->bind_param("i", $pid);
            $q->execute();
            $res = $q->get_result();
            $pr = $res ? $res->fetch_assoc() : null;
            $q->close();
        } else {
            $pr = null;
        }

        if (!$pr) {
            flash_set('error', 'Батька/матір не знайдено.');
            header("Location: admin_father.php" . ($selected_group_id ? '?group_id='.$selected_group_id : ''));
            exit();
        }

        if ((int)$pr['active'] === 1) {
            flash_set('success', 'Аккаунт вже активовано.');
            header("Location: admin_father.php" . ($selected_group_id ? '?group_id='.$selected_group_id : ''));
            exit();
        }

        $ends_with_local = (function_exists('str_ends_with'))
            ? str_ends_with($pr['email'], '@ej.local')
            : (substr($pr['email'], -8) === '@ej.local');

        if ($pr['email'] === '' || $ends_with_local) {
            flash_set('error', 'Немає дійсного email для надсилання активації.');
            header("Location: admin_father.php" . ($selected_group_id ? '?group_id='.$selected_group_id : ''));
            exit();
        }

        $code = $pr['code'] !== '' ? $pr['code'] : bin2hex(random_bytes(16));
        if ($pr['code'] === '') {
            if ($u = $conn->prepare("UPDATE users SET activation_code = ? WHERE id = ?")) {
                $u->bind_param("si", $code, $pid);
                $u->execute();
                $u->close();
            }
        }

        $link = build_activation_link($host, $scheme, $code);
        $ok = send_activation_mail($config_mail, $pr['email'], $pr['full_name'], $link);
        if ($ok) {
            flash_set('success', 'Лист із активацією відправлено на '.$pr['email'].'.');
        } else {
            flash_set('error', 'Не вдалося надіслати лист активації.');
        }

        header("Location: admin_father.php" . ($selected_group_id ? '?group_id='.$selected_group_id : ''));
        exit();
    }

    /* --- Додати зв’язок «батько ↔ учень» --- */
    if (isset($_POST['link_add'])) {
        $parent_id  = (int)($_POST['parent_id'] ?? 0);
        $student_id = (int)($_POST['student_id'] ?? 0);

        if ($parent_id <= 0 || $student_id <= 0) {
            flash_set('error', 'Вкажіть коректні значення для батька і учня.');
            header("Location: admin_father.php" . ($selected_group_id ? '?group_id='.$selected_group_id : ''));
            exit();
        }

        // Перевірка ролей
        $q = "SELECT id, role FROM users WHERE id IN (?, ?) ORDER BY FIELD(id, ?, ?)";
        if ($st = $conn->prepare($q)) {
            $st->bind_param('iiii', $parent_id, $student_id, $parent_id, $student_id);
            $st->execute();
            $res = $st->get_result();
            $roles = [];
            while ($u = $res->fetch_assoc()) {
                $roles[(int)$u['id']] = $u['role'];
            }
            $st->close();
        } else {
            $roles = [];
        }

        if (($roles[$parent_id] ?? '') !== 'parent') {
            flash_set('error', 'Користувач #'.$parent_id.' не має ролі parent.');
        } elseif (($roles[$student_id] ?? '') !== 'student') {
            flash_set('error', 'Користувач #'.$student_id.' не має ролі student.');
        } else {
            $ins = "INSERT IGNORE INTO parent_links(parent_id, student_id) VALUES (?, ?)";
            if ($st = $conn->prepare($ins)) {
                $st->bind_param('ii', $parent_id, $student_id);
                if ($st->execute()) {
                    flash_set('success', 'Зв’язок додано.');
                } else {
                    flash_set('error', 'Не вдалося додати зв’язок.');
                }
                $st->close();
            } else {
                flash_set('error', 'Помилка підготовки запиту додавання зв’язку.');
            }
        }

        header("Location: admin_father.php" . ($selected_group_id ? '?group_id='.$selected_group_id : ''));
        exit();
    }

    /* --- Видалити зв’язок «батько ↔ учень» --- */
    if (isset($_POST['link_delete'])) {
        $parent_id  = (int)($_POST['parent_id'] ?? 0);
        $student_id = (int)($_POST['student_id'] ?? 0);

        $del = "DELETE FROM parent_links WHERE parent_id=? AND student_id=? LIMIT 1";
        if ($st = $conn->prepare($del)) {
            $st->bind_param('ii', $parent_id, $student_id);
            if ($st->execute()) {
                flash_set('success', 'Зв’язок видалено.');
            } else {
                flash_set('error', 'Не вдалося видалити зв’язок.');
            }
            $st->close();
        } else {
            flash_set('error', 'Помилка підготовки запиту видалення зв’язку.');
        }

        header("Location: admin_father.php" . ($selected_group_id ? '?group_id='.$selected_group_id : ''));
        exit();
    }


    /* --- Видалити самого батька разом з усіма зв’язками --- */
    if (isset($_POST['delete_parent'], $_POST['parent_id'])) {
        $pid = (int)$_POST['parent_id'];
        if ($pid > 0) {
            $conn->begin_transaction();
            try {
                if ($st = $conn->prepare("DELETE FROM parent_links WHERE parent_id = ?")) {
                    $st->bind_param("i", $pid);
                    $st->execute();
                    $st->close();
                }
                if ($st = $conn->prepare("DELETE FROM users WHERE id = ? AND role='parent'")) {
                    $st->bind_param("i", $pid);
                    $st->execute();
                    $st->close();
                }
                $conn->commit();
                flash_set('success', 'Батька/матір та всі його/її зв’язки видалено.');
            } catch (Throwable $e) {
                $conn->rollback();
                flash_set('error', 'Не вдалося видалити батька/матір.');
            }
        }
        header("Location: admin_father.php" . ($selected_group_id ? '?group_id='.$selected_group_id : ''));
        exit();
    }

    // Якщо сюди дійшли — невідома дія
    header("Location: admin_father.php" . ($selected_group_id ? '?group_id='.$selected_group_id : ''));
    exit();
}

/* ===== Списки для селектів (усі батьки та учні) ===== */

// Усі батьки (для селекта + для списку)
$parents_all = [];
$qP = "SELECT id, full_name, email, active, last_login_at FROM users WHERE role='parent' ORDER BY full_name ASC";
if ($r = $conn->query($qP)) {
    while ($u = $r->fetch_assoc()) $parents_all[(int)$u['id']] = $u;
}

// Учні для блоку "створити зв’язок" (фільтр за обраною групою / усі)
$students_select = [];
if ($selected_group_id > 0) {
    $qS = "SELECT u.id, u.full_name, u.group_id, g.group_name
           FROM users u
           LEFT JOIN `groups` g ON g.id = u.group_id
           WHERE u.role='student' AND u.group_id = ?
           ORDER BY u.full_name ASC";
    if ($st = $conn->prepare($qS)) {
        $st->bind_param("i", $selected_group_id);
        $st->execute();
        $res = $st->get_result();
        while ($u = $res->fetch_assoc()) $students_select[] = $u;
        $st->close();
    }
} else {
    $qS = "SELECT u.id, u.full_name, u.group_id, g.group_name
           FROM users u
           LEFT JOIN `groups` g ON g.id = u.group_id
           WHERE u.role='student'
           ORDER BY g.group_name ASC, u.full_name ASC";
    if ($r = $conn->query($qS)) {
        while ($u = $r->fetch_assoc()) $students_select[] = $u;
    }
}

/* ===== Учні для JS (всі, для динамічних блоків дітей) ===== */
$students_all_for_js = [];
$sqlAllStudents = "SELECT u.id, u.full_name, u.group_id, g.group_name
                   FROM users u
                   LEFT JOIN `groups` g ON g.id = u.group_id
                   WHERE u.role='student'
                   ORDER BY g.group_name ASC, u.full_name ASC";
if ($r = $conn->query($sqlAllStudents)) {
    while ($row = $r->fetch_assoc()) {
        $gid = (int)($row['group_id'] ?? 0);
        if (!isset($students_all_for_js[$gid])) {
            $students_all_for_js[$gid] = [];
        }
        $students_all_for_js[$gid][] = [
            'id'   => (int)$row['id'],
            'name' => $row['full_name'],
        ];
    }
}

/* ===== Поточні зв’язки (для відображення карток батьків) ===== */
$parents_view = []; // parent_id => [id,full_name,email,active,last_login_at,children[]]

// 1) Спочатку тягнемо зв’язки з таблиці parent_links (як і раніше)
if ($selected_group_id > 0) {
    // Батьки, у яких є хоча б одна дитина у вибраній групі (через parent_links)
    $sql_links = "
        SELECT 
            p.id   AS parent_id,
            p.full_name AS parent_name,
            p.email AS parent_email,
            p.active AS parent_active,
            p.last_login_at,
            s.id   AS student_id,
            s.full_name AS student_name,
            g.group_name
        FROM parent_links pl
        JOIN users p ON p.id = pl.parent_id AND p.role='parent'
        JOIN users s ON s.id = pl.student_id AND s.role='student'
        LEFT JOIN `groups` g ON g.id = s.group_id
        WHERE s.group_id = ?
        ORDER BY p.full_name ASC, s.full_name ASC
    ";
    if ($st = $conn->prepare($sql_links)) {
        $st->bind_param("i", $selected_group_id);
        $st->execute();
        $res = $st->get_result();
        while ($row = $res->fetch_assoc()) {
            $pid = (int)$row['parent_id'];
            if (!isset($parents_view[$pid])) {
                $parents_view[$pid] = [
                    'id'            => $pid,
                    'full_name'     => $row['parent_name'],
                    'email'         => $row['parent_email'],
                    'active'        => (int)$row['parent_active'],
                    'last_login_at' => $row['last_login_at'],
                    'children'      => [],
                ];
            }
            $parents_view[$pid]['children'][] = [
                'id'         => (int)$row['student_id'],
                'full_name'  => $row['student_name'],
                'group_name' => $row['group_name'],
            ];
        }
        $st->close();
    }
} else {
    // Усі батьки + зв’язки через parent_links
    $sql_links = "
        SELECT 
            p.id   AS parent_id,
            p.full_name AS parent_name,
            p.email AS parent_email,
            p.active AS parent_active,
            p.last_login_at,
            s.id   AS student_id,
            s.full_name AS student_name,
            g.group_name
        FROM users p
        LEFT JOIN parent_links pl ON pl.parent_id = p.id
        LEFT JOIN users s ON s.id = pl.student_id AND s.role='student'
        LEFT JOIN `groups` g ON g.id = s.group_id
        WHERE p.role='parent'
        ORDER BY p.full_name ASC, s.full_name ASC
    ";
    if ($r = $conn->query($sql_links)) {
        while ($row = $r->fetch_assoc()) {
            $pid = (int)$row['parent_id'];
            if (!isset($parents_view[$pid])) {
                $parents_view[$pid] = [
                    'id'            => $pid,
                    'full_name'     => $row['parent_name'],
                    'email'         => $row['parent_email'],
                    'active'        => (int)$row['parent_active'],
                    'last_login_at' => $row['last_login_at'],
                    'children'      => [],
                ];
            }
            if (!empty($row['student_id'])) {
                $parents_view[$pid]['children'][] = [
                    'id'         => (int)$row['student_id'],
                    'full_name'  => $row['student_name'],
                    'group_name' => $row['group_name'],
                ];
            }
        }
    }
}

// 2) Додаємо учня з поля users.child_id (зв’язок «1 батько — 1 дитина» з edit_user.php)
if ($selected_group_id > 0) {
    $sql_child = "
        SELECT
            p.id   AS parent_id,
            p.full_name AS parent_name,
            p.email AS parent_email,
            p.active AS parent_active,
            p.last_login_at,
            s.id   AS student_id,
            s.full_name AS student_name,
            g.group_name
        FROM users p
        JOIN users s ON s.id = p.child_id AND s.role='student'
        LEFT JOIN `groups` g ON g.id = s.group_id
        WHERE p.role='parent' AND s.group_id = ?
        ORDER BY p.full_name ASC, s.full_name ASC
    ";
    if ($st = $conn->prepare($sql_child)) {
        $st->bind_param("i", $selected_group_id);
        $st->execute();
        $res = $st->get_result();
        while ($row = $res->fetch_assoc()) {
            $pid = (int)$row['parent_id'];
            $sid = (int)$row['student_id'];
            if (!isset($parents_view[$pid])) {
                $parents_view[$pid] = [
                    'id'            => $pid,
                    'full_name'     => $row['parent_name'],
                    'email'         => $row['parent_email'],


                    'active'        => (int)$row['parent_active'],
                    'last_login_at' => $row['last_login_at'],
                    'children'      => [],
                ];
            }
            // Перевіряємо, чи такого учня ще не додали для цього батька
            $exists = false;
            foreach ($parents_view[$pid]['children'] as $ch) {
                if ((int)$ch['id'] === $sid) { $exists = true; break; }
            }
            if (!$exists) {
                $parents_view[$pid]['children'][] = [
                    'id'         => $sid,
                    'full_name'  => $row['student_name'],
                    'group_name' => $row['group_name'],
                ];
            }
        }
        $st->close();
    }
} else {
    $sql_child = "
        SELECT
            p.id   AS parent_id,
            p.full_name AS parent_name,
            p.email AS parent_email,
            p.active AS parent_active,
            p.last_login_at,
            s.id   AS student_id,
            s.full_name AS student_name,
            g.group_name
        FROM users p
        JOIN users s ON s.id = p.child_id AND s.role='student'
        LEFT JOIN `groups` g ON g.id = s.group_id
        WHERE p.role='parent'
        ORDER BY p.full_name ASC, s.full_name ASC
    ";
    if ($r = $conn->query($sql_child)) {
        while ($row = $r->fetch_assoc()) {
            $pid = (int)$row['parent_id'];
            $sid = (int)$row['student_id'];
            if (!isset($parents_view[$pid])) {
                $parents_view[$pid] = [
                    'id'            => $pid,
                    'full_name'     => $row['parent_name'],
                    'email'         => $row['parent_email'],
                    'active'        => (int)$row['parent_active'],
                    'last_login_at' => $row['last_login_at'],
                    'children'      => [],
                ];
            }
            $exists = false;
            foreach ($parents_view[$pid]['children'] as $ch) {
                if ((int)$ch['id'] === $sid) { $exists = true; break; }
            }
            if (!$exists) {
                $parents_view[$pid]['children'][] = [
                    'id'         => $sid,
                    'full_name'  => $row['student_name'],
                    'group_name' => $row['group_name'],
                ];
            }
        }
    }
}

// Перетворити в звичайний масив для foreach
$parents_cards = array_values($parents_view);

/* ===== HTML ===== */
?>
<!DOCTYPE html>
<html lang="uk">
<head>
    <meta charset="UTF-8">
    <meta name="robots" content="noindex, nofollow">
    <title>Батьки — Адмінпанель</title>
    <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
    <link rel="stylesheet" href="../assets/css/style.css">
    <style>
        :root{
            /* ===== Палітра КПКІТП (фіолетово-м'ятна) ===== */
            --mint: #a0e8d0;
            --mint-2: #89e0c5;
            --purple: #432855;
            --purple-2: #351f46;

            --bg: #f2fbf7;
            --card: rgba(255,255,255,.92);
            --text: #221a2d;
            --muted: rgba(34,26,45,.72);

            --brand: var(--purple);
            --brand-hover: var(--purple-2);

            --radius: 16px;
            --shadow: 0 14px 34px rgba(67,40,85,.12);
            --border: rgba(67,40,85,.14);

            --danger:#dc2626; --danger-hover:#b91c1c;
            --focus: rgba(160,232,208,.55);

            /* legacy vars (щоб нічого не ламалось по коду) */
            --ua-blue:#0057b7; --ua-yellow:#ffd700;
        }

        *{box-sizing:border-box}
        body{
            margin:0;
            font-family:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,"Noto Sans","Helvetica Neue",Arial;
            color:var(--text);
            overflow-x:hidden;
            background:
                radial-gradient(1100px 520px at 14% -8%, rgba(160,232,208,.75), transparent 60%),
                radial-gradient(900px 520px at 92% -6%, rgba(67,40,85,.18), transparent 60%),
                linear-gradient(180deg, #eefcf7 0%, #f6faf8 42%, #f6f7fb 100%);
        }

        .container{ width:100%; max-width:1040px; padding:14px; margin:0 auto; }
        .card{
            background:var(--card);
            border-radius:var(--radius);
            box-shadow:var(--shadow);
            padding:18px;
            border:1px solid var(--border);
            backdrop-filter: blur(6px);
        }
        h1{ margin:0 0 6px; font-size:22px; text-align:left; }
        .lead{ color:var(--muted); font-size:14px; margin:0 0 14px; }

        /* ===== Tabs (як у admin/dashboard.php) ===== */
        .admin-tabs{
            display:flex;
            gap:10px;
            flex-wrap:wrap;
            align-items:center;
            margin: 2px 0 14px;
        }
        .admin-tabs a{
            display:inline-flex;
            align-items:center;
            justify-content:center;
            gap:8px;
            padding:10px 14px;
            border-radius:999px;
            text-decoration:none;
            font-weight:900;
            font-size:14px;
            color: var(--text);
            background: rgba(67,40,85,.08);
            border: 1px solid rgba(67,40,85,.18);
            box-shadow: 0 10px 22px rgba(67,40,85,.08);
            transition: transform .08s ease, box-shadow .12s ease, background .12s ease, border-color .12s ease;
        }
        .admin-tabs a:hover{
            transform: translateY(-1px);
            background: rgba(160,232,208,.45);
            border-color: rgba(67,40,85,.22);
            box-shadow: 0 14px 28px rgba(67,40,85,.10);
        }
        .admin-tabs a.active{
            color:#fff;
            background: linear-gradient(135deg, var(--purple) 0%, #4b2a61 55%, rgba(160,232,208,.95) 120%);
            border-color: rgba(255,255,255,.22);
            box-shadow: 0 18px 40px rgba(67,40,85,.18);
        }

        .alert{
            border:1px solid var(--border);
            border-left-width:6px;
            padding:12px 14px;
            border-radius:12px;
            margin:10px 0;
            background: rgba(255,255,255,.92);
            box-shadow: 0 12px 26px rgba(67,40,85,.08);
        }
        .alert.success{ border-left-color:#16a34a; }
        .alert.error{ border-left-color:#dc2626; }

        .controls{ display:grid; gap:8px; margin:10px 0 14px; }
        label{ font-size:14px; font-weight:900; color:var(--text); }
        select{
            width:100%; max-width:420px;
            padding:12px 14px;
            border:1px solid rgba(67,40,85,.18);
            border-radius:12px;
            background:#fff;
            font-size:16px;
            outline:none;
            box-shadow: 0 10px 22px rgba(67,40,85,.06);
            transition: border-color .12s ease, box-shadow .12s ease;
        }
        select:focus{
            border-color: rgba(67,40,85,.32);
            box-shadow: 0 0 0 4px var(--focus), 0 14px 30px rgba(67,40,85,.10);
        }

        .add-card{
            background: rgba(255,255,255,.92);
            border:1px solid var(--border);
            border-radius:14px;
            padding:12px;
            box-shadow: 0 14px 34px rgba(67,40,85,.10);
            margin:14px 0;
        }
        .grid{ display:grid; gap:10px; }
        .grid-2{ display:grid; gap:10px; }
        .input{
            width:100%;
            padding:10px 12px;
            border:1px solid rgba(67,40,85,.18);
            border-radius:12px;
            font-size:15px;
            background:#fff;
            outline:none;
            box-shadow: 0 10px 22px rgba(67,40,85,.06);
            transition: border-color .12s ease, box-shadow .12s ease;
        }
        .input:focus{
            border-color: rgba(67,40,85,.32);
            box-shadow: 0 0 0 4px var(--focus), 0 14px 30px rgba(67,40,85,.10);
        }
        .small{ font-size:12px; color:var(--muted); }


        .btn{
            display:inline-block;
            text-decoration:none;
            padding:10px 14px;
            border-radius:12px;
            font-weight:900;
            font-size:14px;
            cursor:pointer;
            border:1px solid transparent;
            transition: transform .08s ease, box-shadow .12s ease, filter .12s ease, opacity .12s ease;
        }
        .btn:active{ transform: translateY(0); }
        .btn-primary{
            color:#fff;
            background: linear-gradient(135deg, var(--purple) 0%, #4b2a61 70%);
            border-color: rgba(255,255,255,.18);
            box-shadow: 0 14px 28px rgba(67,40,85,.16);
        }
        .btn-primary:hover{
            filter: brightness(1.05);
            transform: translateY(-1px);
            box-shadow: 0 18px 36px rgba(67,40,85,.20);
        }
        .btn-danger{
            background: linear-gradient(135deg, var(--danger) 0%, #b91c1c 70%);
            color:#fff;
            border-color: rgba(255,255,255,.18);
            box-shadow: 0 14px 28px rgba(220,38,38,.18);
        }
        .btn-danger:hover{ filter:brightness(1.03); transform: translateY(-1px); }

        .btn-ua{
            background: linear-gradient(135deg, rgba(160,232,208,.85) 0%, rgba(67,40,85,.92) 85%);
            color:#fff;
            border-color: rgba(255,255,255,.18);
            box-shadow: 0 14px 28px rgba(67,40,85,.14);
        }
        .btn-ua:hover{ filter:brightness(1.03); transform: translateY(-1px); }
        .btn-ua:disabled{ opacity:.55; cursor:not-allowed; filter:saturate(.2); transform:none; }

        .btn-xs{ padding:6px 10px; font-size:12px; border-radius:10px; }

        .parent-list{ display:grid; gap:12px; margin-top:10px; }
        .parent{
            background: rgba(255,255,255,.92);
            border:1px solid var(--border);
            border-radius:14px;
            padding:12px;
            box-shadow: 0 14px 34px rgba(67,40,85,.10);
        }
        .rowTop{ display:flex; align-items:center; justify-content:space-between; gap:10px; margin-bottom:6px; }
        .name{ font-weight:950; font-size:16px; line-height:1.25; }
        .email{ font-size:14px; color:var(--muted); word-break:break-all; margin-bottom:6px; }
        .meta{ font-size:12px; color:var(--muted); margin-bottom:10px; line-height:1.4; }

        .child-list{ display:flex; flex-direction:column; gap:6px; margin-bottom:10px; }
        .child-item{
            display:flex;
            flex-wrap:wrap;
            align-items:center;
            justify-content:space-between;
            gap:8px;
            padding:8px 10px;
            border-radius:12px;
            background: rgba(160,232,208,.16);
            border:1px solid rgba(67,40,85,.12);
            font-size:13px;
        }
        .child-name{ font-weight:900; }
        .child-group{ font-size:12px; color:var(--muted); }

        .actions{ display:flex; gap:8px; flex-wrap:wrap; }

        .child-rows{ display:flex; flex-direction:column; gap:8px; margin-top:4px; }
        .child-row{
            border:1px dashed rgba(67,40,85,.22);
            border-radius:12px;
            padding:10px;
            background: rgba(160,232,208,.14);
        }

        @media (min-width:768px){
            .card{ padding:22px; }
            h1{ font-size:24px; }
            .parent{ padding:14px; }
            .name{ font-size:17px; }
            .grid-2{ grid-template-columns: 1fr 1fr; gap:12px; }
        }
    </style>
    <script>
        function redirectToGroupFather() {
            var groupId = document.getElementById("group_id").value;
            if (groupId) {
                window.location.href = "admin_father.php?group_id=" + groupId;
            } else {
                window.location.href = "admin_father.php";
            }
        }

        // Дані учнів по групах для динамічних селектів
        var studentsByGroup = <?php echo json_encode($students_all_for_js, JSON_UNESCAPED_UNICODE); ?>;

        function escapeHtml(text) {
            var map = {
                '&': '&amp;',
                '<': '&lt;',
                '>': '&gt;',
                '"': '&quot;',
                "'": '&#039;'
            };
            return String(text).replace(/[&<>"']/g, function(m) { return map[m]; });
        }

        function onChildGroupChange(selectEl) {
            var gid = selectEl.value || '0';
            var row = selectEl.closest('.child-row');
            if (!row) return;
            var studentSelect = row.querySelector('.child-student-select');
            if (!studentSelect) return;

            var options = ['<option value="">— Оберіть учня —</option>'];
            var list = studentsByGroup[gid] || [];
            for (var i = 0; i < list.length; i++) {
                var s = list[i];
                options.push('<option value="' + s.id + '">' + escapeHtml(s.name) + '</option>');
            }
            studentSelect.innerHTML = options.join('');
        }

        function addChildRow() {
            var tmpl = document.getElementById('child-row-template');
            if (!tmpl) return;
            var clone;
            if (tmpl.content) {
                clone = tmpl.content.cloneNode(true);
            } else {
                // fallback для дуже старих браузерів
                clone = document.createElement('div');
                clone.innerHTML = tmpl.innerHTML;
            }
            var container = document.getElementById('child-rows');
            if (!container || !clone) return;
            container.appendChild(clone);
        }
    </script>
</head>
<body>

<?php require __DIR__ . '/../includes/header.php'; ?>

<main class="container">

    <?php
    // Вкладки як у admin/dashboard.php (однакові всюди)
    $tabs = [
        ['href' => 'dashboard.php',        'label' => 'Журнали'],
        ['href' => '../journal/group_journal.php', 'label' => 'Управління журналами'],
        ['href' => 'dz/index.php',         'label' => 'Домашнє завдання'],
        ['href' => 'admin_students.php',   'label' => 'Учні'],
        ['href' => 'admin_father.php',     'label' => 'Батьки'],
        ['href' => 'admin_teachers.php',   'label' => 'Вчителі'],
        ['href' => 'admin_system.php',     'label' => 'Система'],
    ];
    ?>
    <nav class="admin-tabs" aria-label="Адмін навігація">
        <?php foreach ($tabs as $t):
            $href = (string)($t['href'] ?? '');
            $label = (string)($t['label'] ?? '');
            $active = (basename($href) === $current_file) ? 'active' : '';
        ?>
            <a class="<?= h($active) ?>" href="<?= h($href) ?>"><?= h($label) ?></a>
        <?php endforeach; ?>
    </nav>

    <section class="card">
        <h1>Батьки та зв’язки з учнями</h1>
        <p class="lead">Керування батьками, активацією облікових записів і зв’язками «батько ↔ учень».</p>

        <?php if ($m = flash_get('success')): ?>
            <div class="alert success"><?= h($m); ?></div>
        <?php endif; ?>
        <?php if ($m = flash_get('error')): ?>
            <div class="alert error"><?= h($m); ?></div>
        <?php endif; ?>

        <!-- Фільтр за групою учнів -->
        <div class="controls">
            <label for="group_id">Фільтрація за групою учнів</label>
            <select name="group_id" id="group_id" onchange="redirectToGroupFather()">
                <option value="">— Усі групи —</option>
                <?php foreach ($groups as $group): ?>
                    <option value="<?= (int)$group['id']; ?>" <?= $selected_group_id == $group['id'] ? 'selected' : ''; ?>>
                        <?= h($group['group_name']); ?>
                    </option>
                <?php endforeach; ?>
            </select>
        </div>

        <?php if ($is_admin): ?>
        <!-- Ручне додавання батька/матері + вибір дітей -->
        <div class="add-card">
            <h3 style="margin-top:0;margin-bottom:8px;font-size:16px;">Додати батька / матір вручну</h3>
            <form method="post" class="grid">
                <input type="hidden" name="manual_add_parent" value="1">
                <input type="hidden" name="csrf_token" value="<?= h($CSRF); ?>">

                <div class="grid-2">
                    <div class="grid">
                        <label for="new_full_name">ПІБ батька/матері *</label>
                        <input class="input" type="text" id="new_full_name" name="new_full_name"
                               required maxlength="255" placeholder="Прізвище Ім’я По батькові">
                    </div>

                    <div class="grid">
                        <label for="new_email">Email (необов’язково)</label>
                        <input class="input" type="email" id="new_email" name="new_email"
                               maxlength="255" placeholder="name@example.com">
                        <span class="small">Якщо вкажете email — ми надішлемо лист для активації акаунта.</span>
                    </div>
                </div>

                <div class="grid">
                    <label>Діти для прив’язки</label>
                    <div id="child-rows" class="child-rows">
                        <!-- перший ряд автоматично -->
                        <div class="child-row">
                            <div class="grid-2">
                                <div class="grid">
                                    <label>Група</label>
                                    <select name="child_group[]" class="input child-group-select" onchange="onChildGroupChange(this)">
                                        <option value="">— Оберіть групу —</option>
                                        <?php foreach ($groups as $group): ?>
                                            <option value="<?= (int)$group['id']; ?>"><?= h($group['group_name']); ?></option>
                                        <?php endforeach; ?>
                                    </select>
                                </div>
                                <div class="grid">
                                    <label>Учень</label>
                                    <select name="child_ids[]" class="input child-student-select">
                                        <option value="">— Спочатку оберіть групу —</option>
                                    </select>
                                </div>
                            </div>
                        </div>
                    </div>
                    <button type="button" class="btn btn-primary" style="margin-top:8px;" onclick="addChildRow()">Додати ще дитину</button>
                    <span class="small">Можна додати кілька дітей з різних груп. Група визначає список учнів у другому полі.</span>
                </div>

                <div>
                    <button class="btn btn-primary" type="submit">Додати батька / матір</button>
                </div>
            </form>

            <!-- Шаблон для додаткових дітей -->
            <template id="child-row-template">
                <div class="child-row">
                    <div class="grid-2">
                        <div class="grid">
                            <label>Група</label>
                            <select name="child_group[]" class="input child-group-select" onchange="onChildGroupChange(this)">
                                <option value="">— Оберіть групу —</option>
                                <?php foreach ($groups as $group): ?>
                                    <option value="<?= (int)$group['id']; ?>"><?= h($group['group_name']); ?></option>
                                <?php endforeach; ?>
                            </select>
                        </div>
                        <div class="grid">
                            <label>Учень</label>
                            <select name="child_ids[]" class="input child-student-select">
                                <option value="">— Спочатку оберіть групу —</option>
                            </select>
                        </div>
                    </div>
                </div>
            </template>
        </div>

        <!-- Створення зв’язку «батько ↔ учень» -->
        <div class="add-card">
            <h3 style="margin-top:0;margin-bottom:8px;font-size:16px;">Створити зв’язок «батько ↔ учень»</h3>
            <form method="post" class="grid-2">
                <input type="hidden" name="link_add" value="1">
                <input type="hidden" name="csrf_token" value="<?= h($CSRF); ?>">

                <div class="grid">
                    <label for="parent_id">Батько/мати (роль parent):</label>
                    <select id="parent_id" name="parent_id" required>
                        <option value="">— оберіть —</option>
                        <?php foreach ($parents_all as $p): ?>
                            <option value="<?= (int)$p['id']; ?>">
                                <?= h($p['full_name']); ?> (<?= h($p['email']); ?>)
                            </option>
                        <?php endforeach; ?>
                    </select>
                </div>

                <div class="grid">
                    <label for="student_id">Учень<?= $selected_group_id ? ' обраної групи' : ''; ?>:</label>
                    <select id="student_id" name="student_id" required>
                        <option value="">— оберіть —</option>
                        <?php foreach ($students_select as $s): ?>
                            <option value="<?= (int)$s['id']; ?>">
                                <?= h($s['full_name']); ?>
                                <?php if (!empty($s['group_name'])): ?>
                                    — <?= h($s['group_name']); ?>
                                <?php endif; ?>
                            </option>
                        <?php endforeach; ?>
                    </select>
                </div>

                <div>
                    <button class="btn btn-primary" type="submit">Додати зв’язок</button>
                </div>
            </form>
        </div>
        <?php endif; ?>

        <!-- Список батьків (карточки) -->
        <h2 style="margin-top:24px;font-size:18px;">
            <?php if ($selected_group_id > 0): ?>
                Батьки, пов’язані з учнями обраної групи
            <?php else: ?>
                Усі батьки
            <?php endif; ?>
        </h2>

        <?php if (!empty($parents_cards)): ?>
            <div class="parent-list">
                <?php foreach ($parents_cards as $p): ?>
                    <?php
                    $is_active = (int)$p['active'] === 1;
                    $children  = $p['children'];
                    ?>
                    <div class="parent">
                        <div class="rowTop">
                            <div class="name"><?= h($p['full_name']); ?></div>

                            <?php if ($is_admin): ?>
                            <div class="actions">
                                <form method="post" onsubmit="return confirm('Видалити цього батька разом з усіма зв’язками?');" style="margin:0;">
                                    <input type="hidden" name="delete_parent" value="1">
                                    <input type="hidden" name="parent_id" value="<?= (int)$p['id']; ?>">
                                    <input type="hidden" name="csrf_token" value="<?= h($CSRF); ?>">
                                    <button class="btn btn-danger btn-xs" type="submit">Видалити батька</button>
                                </form>
                            </div>
                            <?php endif; ?>
                        </div>

                        <div class="email"><?= h($p['email']); ?></div>

                        <div class="meta">
                            Останній вхід: <strong><?= h(fmt_dt($p['last_login_at'] ?? null)); ?></strong>
                        </div>

                        <!-- Діти -->
                        <div class="child-list">
                            <?php if (!empty($children)): ?>
                                <?php foreach ($children as $ch): ?>
                                    <div class="child-item">
                                        <div>
                                            <div class="child-name"><?= h($ch['full_name']); ?></div>
                                            <div class="child-group">
                                                Група: <?= h($ch['group_name'] ?? '—'); ?>
                                            </div>
                                        </div>

                                        <?php if ($is_admin): ?>
                                        <form method="post"
                                              onsubmit="return confirm('Видалити зв’язок з учнем <?= addslashes(h($ch['full_name'])); ?>?');">
                                            <input type="hidden" name="link_delete" value="1">
                                            <input type="hidden" name="parent_id" value="<?= (int)$p['id']; ?>">
                                            <input type="hidden" name="student_id" value="<?= (int)$ch['id']; ?>">
                                            <input type="hidden" name="csrf_token" value="<?= h($CSRF); ?>">
                                            <button class="btn btn-danger btn-xs" type="submit">Відв’язати</button>
                                        </form>
                                        <?php endif; ?>
                                    </div>
                                <?php endforeach; ?>
                            <?php else: ?>
                                <div class="child-item">
                                    <div class="child-name">Немає прив’язаних учнів.</div>
                                </div>
                            <?php endif; ?>
                        </div>

                        <?php if ($is_admin): ?>
                        <!-- Дії з акаунтом батька -->
                        <form method="post" style="margin:0 0 10px 0">
                            <input type="hidden" name="send_activation_parent" value="1">
                            <input type="hidden" name="parent_id" value="<?= (int)$p['id']; ?>">
                            <input type="hidden" name="csrf_token" value="<?= h($CSRF); ?>">
                            <button class="btn btn-ua" type="submit" <?= $is_active ? 'disabled' : ''; ?>>
                                <?= $is_active ? 'Аккаунт активний' : 'Активувати'; ?>
                            </button>
                        </form>
                        <?php endif; ?>

                        <div class="actions">
                            <a class="btn btn-primary btn-xs" href="edit_user.php?id=<?= (int)$p['id']; ?>">Редагувати батька</a>
                        </div>
                    </div>
                <?php endforeach; ?>
            </div>
        <?php else: ?>
            <p>Батьків для відображення немає.</p>
        <?php endif; ?>

    </section>
</main>

<?php require __DIR__ . '/../includes/footer.php'; ?>

</body>
</html>