<?php
declare(strict_types=1);

/**
 * EnglishSpeak — Shared Activity Navigation
 *
 * Nguyên tắc:
 * - Chỉ điều hướng trong đúng Lesson của Activity hiện tại.
 * - Thứ tự dựa trên activities.sort_order.
 * - Không dùng activity_id để suy ra Activity kế tiếp.
 * - Chỉ lấy Activity đang active nếu bảng có cột status.
 * - Nếu không còn Activity kế tiếp thì đi Lesson Finish.
 */
if (!function_exists('englishSpeakGetNextActivityUrl')) {
    function englishSpeakGetNextActivityUrl(PDO $pdo, int $currentActivityId): string
    {
        $currentActivityId = max(0, $currentActivityId);

        if ($currentActivityId <= 0) {
            return '';
        }

        // Kiểm tra cột của bảng activities để tránh đoán schema.
        $columnsStmt = $pdo->query("SHOW COLUMNS FROM activities");
        $activityColumns = [];

        foreach ($columnsStmt->fetchAll(PDO::FETCH_ASSOC) as $row) {
            $field = (string)($row['Field'] ?? '');
            if ($field !== '') {
                $activityColumns[$field] = true;
            }
        }

        if (!isset($activityColumns['id'], $activityColumns['lesson_id'])) {
            return '';
        }

        // sort_order là nguồn thứ tự duy nhất.
        if (!isset($activityColumns['sort_order'])) {
            return '';
        }

        // Lấy Lesson và thứ tự của Activity hiện tại.
        $currentStmt = $pdo->prepare(
            "SELECT id, lesson_id, sort_order
             FROM activities
             WHERE id = ?
             LIMIT 1"
        );
        $currentStmt->execute([$currentActivityId]);
        $current = $currentStmt->fetch(PDO::FETCH_ASSOC);

        if (!$current) {
            return '';
        }

        $lessonId = max(0, (int)($current['lesson_id'] ?? 0));
        $currentSortOrder = (int)($current['sort_order'] ?? 0);

        if ($lessonId <= 0) {
            return '';
        }

        /*
         * Tìm Activity đứng ngay sau trong CÙNG Lesson.
         *
         * Dùng cặp (sort_order, id) chỉ để xử lý an toàn khi vô tình có
         * hai Activity cùng sort_order. ID không quyết định thứ tự chính.
         */
        $statusWhere = isset($activityColumns['status'])
            ? "AND (status IS NULL OR status <> 'inactive')"
            : '';

        $nextStmt = $pdo->prepare(
            "SELECT id
             FROM activities
             WHERE lesson_id = ?
               {$statusWhere}
               AND (
                    sort_order > ?
                    OR (sort_order = ? AND id > ?)
               )
             ORDER BY sort_order ASC, id ASC
             LIMIT 1"
        );

        $nextStmt->execute([
            $lessonId,
            $currentSortOrder,
            $currentSortOrder,
            $currentActivityId,
        ]);

        $nextActivityId = max(0, (int)($nextStmt->fetchColumn() ?: 0));

        if ($nextActivityId > 0) {
            return '/EnglishSpeak/student/student-runtime/index.php?'
                . http_build_query(
                    ['activity_id' => $nextActivityId],
                    '',
                    '&',
                    PHP_QUERY_RFC3986
                );
        }

        // Không còn Activity nào trong Lesson hiện tại -> Lesson Finish.
        return '/EnglishSpeak/student/lesson-finished.php?'
            . http_build_query(
                ['lesson_id' => $lessonId],
                '',
                '&',
                PHP_QUERY_RFC3986
            );
    }
}
