var tdv_sdk = {};
tdv_sdk.list = [
    // ==================== PART 1: MULTIPLE CHOICE (Q1-Q10) - DỄ → TRUNG BÌNH ====================
    {
        "id": 1,
        "question": "Choose the correct greeting.",
        "options": ["My name Rosy", "Hello, my name is Tim.", "Name is hello", "I class Tim"],
        "answer": "Hello, my name is Tim.",
        "audio": ""
    },
    {
        "id": 2,
        "question": "Which sentence is correct?",
        "options": ["My name Tim.", "I name is Tim.", "My name is Tim.", "My Tim name."],
        "answer": "My name is Tim.",
        "audio": ""
    },
    {
        "id": 3,
        "question": "Which number comes after seven?",
        "options": ["six", "eight", "nine", "ten"],
        "answer": "eight",
        "audio": ""
    },
    {
        "id": 4,
        "question": "Which word is NOT a toy?",
        "options": ["doll", "teddy bear", "car", "pencil"],
        "answer": "pencil",
        "audio": ""
    },
    {
        "id": 5,
        "question": "Which word starts with the /b/ sound?",
        "options": ["apple", "ball", "annie", "egg"],
        "answer": "ball",
        "audio": ""
    },
    {
        "id": 6,
        "question": "Which thing is usually in a pencil case?",
        "options": ["door", "window", "eraser", "bag"],
        "answer": "eraser",
        "audio": ""
    },
    {
        "id": 7,
        "question": "Who is your dad's sister?",
        "options": ["uncle", "cousin", "aunt", "brother"],
        "answer": "aunt",
        "audio": ""
    },
    {
        "id": 8,
        "question": "Which sentence is correct?",
        "options": ["I has a sister.", "I have a sister.", "I am a sister.", "I sister have."],
        "answer": "I have a sister.",
        "audio": ""
    },
    {
        "id": 9,
        "question": "Which animal is NOT big?",
        "options": ["elephant", "giraffe", "hippo", "fish"],
        "answer": "fish",
        "audio": ""
    },
    {
        "id": 10,
        "question": "Which word means 'not long'?",
        "options": ["tall", "short", "thin", "little"],
        "answer": "short",
        "audio": ""
    },
    // ==================== PART 2: FILL IN THE BLANKS (Q11-Q20) - TRUNG BÌNH → KHÓ ====================
    {
        "id": 11,
        "question": "Hello. My ___ is Billy.",
        "options": ["class", "name", "my", "hello"],
        "answer": "name",
        "audio": ""
    },
    {
        "id": 12,
        "question": "I have a pen and a ___.",
        "options": ["doors", "windows", "pencil", "bags"],
        "answer": "pencil",
        "audio": ""
    },
    {
        "id": 13,
        "question": "The giraffe is tall. The bird is ___.",
        "options": ["big", "tall", "little", "long"],
        "answer": "little",
        "audio": ""
    },
    {
        "id": 14,
        "question": "Choose the correct sentence.",
        "options": ["He have black hair.", "He has black hair.", "He is black hair.", "He black hair."],
        "answer": "He has black hair.",
        "audio": ""
    },
    {
        "id": 15,
        "question": "Which word has the /c/ sound?",
        "options": ["dog", "desk", "cat", "fig"],
        "answer": "cat",
        "audio": ""
    },
    {
        "id": 16,
        "question": "Which word has the /d/ sound?",
        "options": ["goat", "chicken", "dog", "cookie"],
        "answer": "dog",
        "audio": ""
    },
    {
        "id": 17,
        "question": "I eat rice and ___.",
        "options": ["milk", "juice", "meat", "water"],
        "answer": "meat",
        "audio": ""
    },
    {
        "id": 18,
        "question": "Which word has the /i/ sound?",
        "options": ["egg", "ink", "apple", "goat"],
        "answer": "ink",
        "audio": ""
    },
    {
        "id": 19,
        "question": "She has ___ hair. (not straight)",
        "options": ["long", "short", "curly", "black"],
        "answer": "curly",
        "audio": ""
    },
    {
        "id": 20,
        "question": "Choose the correct sentence.",
        "options": ["I have brown eye.", "I has brown eyes.", "I have brown eyes.", "I am brown eyes."],
        "answer": "I have brown eyes.",
        "audio": ""
    },
    // ==================== PART 3: LISTENING (Q21-Q30) - TRICKY VERSION ====================
    {
        "id": 21,
        "question": "Who is Rosy's teacher?",
        "options": ["Tim", "Billy", "Miss Jones", "Annie"],
        "answer": "Miss Jones",
        "audio": "https://audio.senaai.tech/audio/Sena_Voice1_hello_my_name_is_rosy_i_am_not_in_tims_class_i_am__26b5db3e.mp3"
    },
    {
        "id": 22,
        "question": "Which number does the speaker NOT count?",
        "options": ["three", "four", "five", "six"],
        "answer": "six",
        "audio": "https://audio.senaai.tech/audio/Sena_Voice1_i_can_count_numbers_i_count_one_to_five_i_stop_at__11cfd4d6.mp3"
    },
    {
        "id": 23,
        "question": "Which toy does the speaker have?",
        "options": ["doll", "teddy bear", "ball", "kite"],
        "answer": "ball",
        "audio": "https://audio.senaai.tech/audio/Sena_Voice1_i_have_many_toys_i_have_a_ball_and_a_car_i_dont_ha_d45aa04e.mp3"
    },
    {
        "id": 24,
        "question": "Where is the pencil?",
        "options": ["in the bag", "on the desk", "in the pencil case", "under the book"],
        "answer": "in the pencil case",
        "audio": "https://audio.senaai.tech/audio/Sena_Voice1_look_in_my_bag_there_is_a_pencil_case_the_pencil_i_0b7bb024.mp3"
    },
    {
        "id": 25,
        "question": "Who does the speaker have?",
        "options": ["sister", "cousin", "brother", "aunt"],
        "answer": "brother",
        "audio": "https://audio.senaai.tech/audio/Sena_Voice1_this_is_my_family_i_have_one_brother_i_dont_have_a_699c2d45.mp3"
    },
    {
        "id": 26,
        "question": "Which animal is big?",
        "options": ["giraffe", "bird", "elephant", "fish"],
        "answer": "elephant",
        "audio": "https://audio.senaai.tech/audio/Sena_Voice1_i_see_animals_the_elephant_is_big_the_giraffe_is_t_2bd3f1eb.mp3"
    },
    {
        "id": 27,
        "question": "What does the speaker drink?",
        "options": ["juice", "water", "milk", "yogurt"],
        "answer": "milk",
        "audio": "https://audio.senaai.tech/audio/Sena_Voice1_i_eat_rice_and_meat_i_drink_milk_not_juice_juice_i_3b913853.mp3"
    },
    {
        "id": 28,
        "question": "What is correct about his hair?",
        "options": ["long brown hair", "short brown hair", "short hair", "long black hair"],
        "answer": "short hair",
        "audio": "https://audio.senaai.tech/audio/Sena_Voice1_my_brother_is_tall_he_has_short_hair_his_hair_is_n_8601e646.mp3"
    },
    {
        "id": 29,
        "question": "Where is the fish?",
        "options": ["on the tree", "in the water", "on the desk", "in the bag"],
        "answer": "in the water",
        "audio": "https://audio.senaai.tech/audio/Sena_Voice1_i_see_a_cat_and_a_dog_the_bird_is_on_the_tree_the__722df16d.mp3"
    },
    {
        "id": 30,
        "question": "What does the speaker do first?",
        "options": ["look out the window", "close the door", "open the door", "open the window"],
        "answer": "open the door",
        "audio": "https://audio.senaai.tech/audio/Sena_Voice1_i_open_the_door_i_look_out_the_window_i_close_the__9d3fa0c9.mp3"
    },
    // ==================== PART 4: TET BACK-UP (Q31-Q40) ====================
    {
        "id": 31,
        "question": "We see many apricot blossoms at Tet in the South of Vietnam.\n\nWhat color are apricot blossoms usually?",
        "options": ["Blue", "Yellow", "Purple", "Black"],
        "answer": "Yellow",
        "audio": ""
    },
    {
        "id": 32,
        "question": "At Tet, children get lucky money in a ____.",
        "options": ["white box", "school bag", "red envelope", "paper bag"],
        "answer": "red envelope",
        "audio": ""
    },
    {
        "id": 33,
        "question": "What is its Vietnamese name?",
        "options": ["Bánh mì", "Bánh tét", "Bánh chưng", "Bánh bao"],
        "answer": "Bánh chưng",
        "audio": ""
    },
    {
        "id": 34,
        "question": "People go to the flower market at Tet to ____.",
        "options": ["buy books", "buy flowers", "buy clothes", "buy toys"],
        "answer": "buy flowers",
        "audio": ""
    },
    {
        "id": 35,
        "question": "At Tet, families often visit ____.",
        "options": ["teachers", "classmates", "relatives and friends", "neighbors only"],
        "answer": "relatives and friends",
        "audio": ""
    },
    {
        "id": 36,
        "question": "What does 'fireworks' mean?",
        "options": ["flowers", "bright lights in the sky", "thunders on the sky", "clothes"],
        "answer": "bright lights in the sky",
        "audio": ""
    },
    {
        "id": 37,
        "question": "People go to the pagoda at Tet to ____.",
        "options": ["play games", "pray for good luck", "buy food", "watch TV"],
        "answer": "pray for good luck",
        "audio": ""
    },
    {
        "id": 38,
        "question": "Which sentence is correct?",
        "options": ["I get lucky money in red envelope.", "I get lucky money on red envelope.", "I get lucky money from red envelope.", "I get lucky money in a red envelope."],
        "answer": "I get lucky money in a red envelope.",
        "audio": ""
    },
    {
        "id": 39,
        "question": "Which activity is NOT for Tet?",
        "options": ["Getting lucky money", "Watching fireworks", "Visiting relatives", "Taking an English exam"],
        "answer": "Taking an English exam",
        "audio": ""
    },
    {
        "id": 40,
        "question": "What do they do at night?",
        "options": ["Eat cake", "Visit friends", "Watch fireworks", "Go to school"],
        "answer": "Watch fireworks",
        "audio": [
            "https://audio.senaai.tech/audio/Sena_Voice1_at_tet_my_family_eats_square_glutinous_rice_cake_w_9c54c1b1.mp3",
            "https://audio.senaai.tech/audio/Sena_Voice1_at_night_we_watch_fireworks_5c7495f0.mp3"
        ]
    }
];

tdv_sdk.currentIndex = 0;
tdv_sdk.shuffleArray = function (Array) {
    for (let i = Array.length - 1; i > 0; i--) {
        const j = Math.floor(Math.random() * (i + 1));
        [Array[i], Array[j]] = [Array[j], Array[i]];
    }
};

tdv_sdk.start = function () {
    tdv_sdk.currentIndex = 0;
    tdv_sdk.listquestion = [];
    tdv_sdk.totalquestion = 40;
    for (let i = 0; i < tdv_sdk.totalquestion; i++) {
        tdv_sdk.listquestion.push(tdv_sdk.list[i]);
    }
};

tdv_sdk.loadquestion = function () {
    // Kiểm tra xem còn câu hỏi không
    if (tdv_sdk.currentIndex >= tdv_sdk.totalquestion) {
        console.log("🎉 Game Over! No more questions.");
        tdv_sdk.curQuestion = null;
        tdv_sdk.questionState = -1; // State đặc biệt: Game Over
        return 0;  // Trả về 0 để Construct biết game đã kết thúc
    }

    tdv_sdk.curQuestion = tdv_sdk.listquestion[tdv_sdk.currentIndex];
    tdv_sdk.correctAnswer = tdv_sdk.curQuestion.answer;
    tdv_sdk.shuffleArray(tdv_sdk.curQuestion.options);
    tdv_sdk.questionState = 0; // Reset state khi load câu hỏi mới
    return 1;  // Trả về 1 nếu load thành công
};

// ==================== QUESTION STATE MACHINE ====================
// State: 0 = Roll dice, 1 = Chờ start timer, 2 = Đang đếm, 3 = Chờ hiện đáp án, 4 = Chờ đóng layer
tdv_sdk.questionState = 0;

// Lấy state hiện tại (dùng để check trong Construct)
tdv_sdk.getQuestionState = function () {
    return tdv_sdk.questionState;
};

// Set state (dùng khi cần set thủ công)
tdv_sdk.setQuestionState = function (state) {
    tdv_sdk.questionState = state;
    console.log("📍 Question State set to:", state);
    return state;
};

// Xử lý khi bấm Space - trả về state mới
// questionState: 0 = Roll dice, 1 = Start timer, 2 = Đang đếm, 3 = Show answer, 4 = Close layer

tdv_sdk.handleSpacePress = function () {
    switch (tdv_sdk.questionState) {
        case 0:
            // Space: Roll dice
            console.log("🎲 Space 0: Roll dice!");
            return 0;

        case 1:
            // Space: Bắt đầu đếm giờ (chờ hết giờ mới được bấm tiếp)
            tdv_sdk.questionState = 2;
            gameTimer.resetQuestionTimer();
            console.log("▶️ Space 1: Timer started!");
            return 1;

        case 2:
            // Đang đếm giờ - Bấm Space sẽ dừng timer và hiện đáp án ngay
            gameTimer.stopTimer();
            tdv_sdk.questionState = 3;
            console.log("⏹️ Space 2: Timer stopped! Show answer.");
            return 2;

        case 3:
            // Space: Hiện đáp án đúng
            tdv_sdk.questionState = 4;
            console.log("✅ Space 3: Show correct answer!");
            return 3;

        case 4:
            // Space: Đóng layer câu hỏi
            // LƯU Ý: KHÔNG gọi nextQuestion() ở đây vì Construct đã gọi riêng
            tdv_sdk.questionState = 0;
            console.log("🚪 Space 4: Close question layer!");
            return 4;

        default:
            return tdv_sdk.questionState;
    }
};

// Gọi khi bắt đầu hiện câu hỏi (sau khi thỏ di chuyển xong)
tdv_sdk.startQuestion = function () {
    tdv_sdk.questionState = 1;
    console.log("❓ Question ready! Press Space to start timer.");
    return 1;
};

// Gọi khi hết giờ (timer = 0)
tdv_sdk.onTimeUp = function () {
    if (tdv_sdk.questionState === 2) {
        gameTimer.currentTime = 0; // Đảm bảo hiển thị 0
        gameTimer.stopTimer();
        tdv_sdk.questionState = 3;
        console.log("⏰ Time up! Press Space to see answer.");
    }
    return 3;
};

// Gọi khi người chơi trả lời xong (chỉ gọi 1 lần khi đang đếm giờ)
tdv_sdk.onAnswered = function () {
    // Chỉ xử lý nếu đang ở state 2 (đang đếm giờ)
    if (tdv_sdk.questionState !== 2) {
        console.log("⚠️ onAnswered skipped - already processed");
        return tdv_sdk.questionState;
    }
    gameTimer.stopTimer();
    tdv_sdk.questionState = 3;
    console.log("📝 Answered! Press Space to see answer.");
    return 3;
};

// Check xem câu hỏi hiện tại có phải dạng NGHE không (audio là mảng)
// Trả về 1 nếu là Listening Question (Q21-Q30), 0 nếu là câu hỏi thường
tdv_sdk.isListeningQuestion = function () {
    if (!tdv_sdk.curQuestion) return 0;
    return Array.isArray(tdv_sdk.curQuestion.audio) ? 1 : 0;
};

tdv_sdk.getCurQuestion = function () {
    return tdv_sdk.curQuestion.question;
};

tdv_sdk.getCurOptions = function (index) {
    return tdv_sdk.curQuestion.options[index];
};

// Tính scale phù hợp dựa trên độ dài text đáp án
// Trả về giá trị scale từ 0.5 đến 1.0
// maxLength: Độ dài tối đa trước khi bắt đầu thu nhỏ (mặc định 12)
tdv_sdk.getOptionScale = function (index, maxLength) {
    var text = tdv_sdk.curQuestion.options[index] || "";
    var maxLen = maxLength || 12; // Bắt đầu thu nhỏ khi > 12 ký tự
    var minScale = 0.5;  // Scale nhỏ nhất
    var maxScale = 0.8;  // Scale lớn nhất

    var len = text.length;

    if (len <= maxLen) {
        return maxScale; // Giữ nguyên scale = 1 nếu text ngắn
    }

    // Tính toán: giảm dần từ 1.0 đến 0.5 theo độ dài
    var ratio = Math.max(0, 1 - (len - maxLen) / 25);
    var newScale = minScale + (maxScale - minScale) * ratio;

    // Làm tròn 2 chữ số thập phân
    return Math.round(Math.max(minScale, newScale) * 100) / 100;
};

// Phiên bản linh hoạt hơn - tính scale tuyến tính
// Điều chỉnh scale mạnh hơn cho text dài
tdv_sdk.getAnswerScale = function (index, maxLen) {
    // Sử dụng getCurOptions thay vì getAnswerByIndex
    var answer = tdv_sdk.getCurOptions(index);
    if (!answer) return 1;

    var standardLen = maxLen || 8;  // Độ dài chuẩn (giảm từ 10 xuống 8)
    var len = String(answer).length;

    // Scale mạnh hơn cho text dài
    if (len <= standardLen) return 1;         // <= 8 ký tự: scale 1.0
    if (len <= 10) return 0.85;               // 9-10 ký tự
    if (len <= 12) return 0.75;               // 11-12 ký tự
    if (len <= 14) return 0.65;               // 13-14 ký tự (Lunar New Year)
    if (len <= 18) return 0.55;               // 15-18 ký tự
    if (len <= 22) return 0.5;                // 19-22 ký tự
    return 0.45;                              // > 22 ký tự: scale tối thiểu
};

// HÀM MỚI: Nhận TEXT trực tiếp thay vì index (tránh lỗi LoopIndex)
// Sử dụng: tdv_sdk.getTextScale("Lunar New Year")
tdv_sdk.getTextScale = function (text, maxLen) {
    if (!text) return 1;

    var standardLen = maxLen || 8;
    var len = String(text).length;

    // Scale mạnh hơn cho text dài
    if (len <= standardLen) return 1;         // <= 8 ký tự: scale 1.0
    if (len <= 10) return 0.95;               // 9-10 ký tự
    if (len <= 12) return 0.9;               // 11-12 ký tự
    if (len <= 14) return 0.85;               // 13-14 ký tự
    if (len <= 18) return 0.8;               // 15-18 ký tự
    if (len <= 22) return 0.75;                // 19-22 ký tự
    return 0.7;                              // > 22 ký tự: scale tối thiểu
};

tdv_sdk.getCurCorrectOption = function () {
    return tdv_sdk.correctAnswer;
};

tdv_sdk.getCorrectCount = function () {
    return tdv_sdk.answers;
};

tdv_sdk.getCurImageUrl = function () {
    return tdv_sdk.curQuestion.url;
};

tdv_sdk.nextQuestion = function () {
    tdv_sdk.currentIndex++;
};

tdv_sdk.getCurIndex = function () {
    return tdv_sdk.currentIndex;
};

// Alias cho getCurIndex (tương thích với các game khác)
tdv_sdk.getCurrentLevel = function () {
    return tdv_sdk.currentIndex;
};

tdv_sdk.getTotalQuestion = function () {
    return tdv_sdk.totalquestion;
};

// Check xem còn câu hỏi không (trả về 1 nếu còn, 0 nếu hết)
tdv_sdk.hasMoreQuestions = function () {
    return tdv_sdk.currentIndex < tdv_sdk.totalquestion ? 1 : 0;
};

// Check xem đây có phải câu hỏi cuối cùng không (trả về 1 nếu đúng)
tdv_sdk.isLastQuestion = function () {
    return tdv_sdk.currentIndex >= tdv_sdk.totalquestion - 1 ? 1 : 0;
};

// Lấy số câu hỏi còn lại
tdv_sdk.getRemainingQuestions = function () {
    return Math.max(0, tdv_sdk.totalquestion - tdv_sdk.currentIndex);
};

// Reset lại từ đầu (shuffle lại câu hỏi)
tdv_sdk.reloadQuestions = function () {
    tdv_sdk.currentIndex = 0;
    tdv_sdk.listquestion = [];
    for (let i = 0; i < tdv_sdk.totalquestion; i++) {
        tdv_sdk.listquestion.push(tdv_sdk.list[i]);
    }
    console.log("🔄 Questions reloaded and shuffled!");
    return 1;
};

tdv_sdk.getId = function (index) {
    return tdv_sdk.list[index].id;
};

tdv_sdk.getAnswers = function (index) {
    return tdv_sdk.answers[index];
};

// --- AUDIO: Hỗ trợ cả string đơn và mảng audio ---
tdv_sdk.currentAudioQueue = [];
tdv_sdk.currentAudioIndex = 0;

tdv_sdk.playSound = function (name) {
    console.log(`Play sound: ${name}`);
    const audioSrc = `https://audio.senaai.vn/audio/en_female_1_${name.toLowerCase()}.mp3`;
    const audio = new Audio(audioSrc);
    audio.play();
};

// Phát audio câu hỏi (hỗ trợ cả string đơn và mảng)
tdv_sdk.playSoundQuestion = function (rate) {
    // Dừng audio cũ nếu đang chạy
    if (window.audio && !window.audio.paused) {
        window.audio.pause();
        window.audio.currentTime = 0;
    }

    tdv_sdk.currentAudioQueue = [];
    tdv_sdk.currentAudioIndex = 0;

    var audioSource = tdv_sdk.curQuestion.audio;
    var playbackRate = rate || 1;

    if (!audioSource) {
        console.log("Không có audio cho câu hỏi này.");
        return;
    }

    if (Array.isArray(audioSource)) {
        // Mảng audio (Hội thoại: context + question)
        tdv_sdk.currentAudioQueue = audioSource;
        tdv_sdk.playNextInQueue(playbackRate);
    } else {
        // Audio đơn
        tdv_sdk.playSingleAudio(audioSource, playbackRate);
    }
};

tdv_sdk.playSingleAudio = function (src, rate) {
    var audio = new Audio(src);
    audio.playbackRate = rate;
    window.audio = audio;
    audio.play().catch(e => console.error("Lỗi phát audio:", e));
    console.log(`Đang phát: ${src}`);
};

tdv_sdk.playNextInQueue = function (rate) {
    if (tdv_sdk.currentAudioIndex >= tdv_sdk.currentAudioQueue.length) {
        console.log("Đã phát hết đoạn hội thoại.");
        return;
    }

    var src = tdv_sdk.currentAudioQueue[tdv_sdk.currentAudioIndex];
    var audio = new Audio(src);
    audio.playbackRate = rate;
    window.audio = audio;

    audio.onended = function () {
        tdv_sdk.currentAudioIndex++;
        setTimeout(function () {
            tdv_sdk.playNextInQueue(rate);
        }, 300);
    };

    audio.play().catch(e => console.error("Lỗi phát audio:", e));
    console.log(`Đang phát đoạn ${tdv_sdk.currentAudioIndex + 1}: ${src}`);
};

tdv_sdk.stopSound = function () {
    if (window.audio && !window.audio.paused) {
        window.audio.pause();
        window.audio.currentTime = 0;
    }
    tdv_sdk.currentAudioQueue = [];
    tdv_sdk.currentAudioIndex = 0;
};

tdv_sdk.goHome = function () {
    window.location.href = "../";
};

// ==================== QUESTION TIMER (Mỗi câu hỏi 10 giây) ====================
var gameTimer = {};
gameTimer.questionTime = 15;  // Thời gian mỗi câu hỏi (giây)
gameTimer.currentTime = gameTimer.questionTime;
gameTimer.isRunning = false;
gameTimer.intervalId = null;

// Bắt đầu đếm ngược cho câu hỏi hiện tại
gameTimer.startTimer = function () {
    if (gameTimer.isRunning) {
        console.warn("Timer is already running.");
        return 0;
    }

    gameTimer.isRunning = true;
    gameTimer.intervalId = setInterval(function () {
        if (gameTimer.currentTime > 0) {
            gameTimer.currentTime--;
        } else {
            gameTimer.stopTimer();
            console.log("⏰ Question time is up!");
        }
    }, 1000);

    console.log("⏱️ Question timer started:", gameTimer.questionTime, "seconds.");
    return 1;
};

gameTimer.stopTimer = function () {
    if (gameTimer.intervalId) {
        clearInterval(gameTimer.intervalId);
        gameTimer.intervalId = null;
        gameTimer.isRunning = false;
        console.log("Timer stopped.");
    }
};

gameTimer.resetTimer = function () {
    gameTimer.stopTimer();
    gameTimer.currentTime = gameTimer.questionTime;
    console.log("⏱️ Timer reset to:", gameTimer.questionTime, "seconds.");
};

// Reset timer cho câu hỏi mới (gọi khi loadquestion) - CHỈ RESET, KHÔNG START
gameTimer.prepareQuestionTimer = function () {
    gameTimer.stopTimer();
    gameTimer.currentTime = gameTimer.questionTime;
    console.log("⏱️ Timer prepared:", gameTimer.questionTime, "seconds. Press Space to start.");
    return 1;
};

// Reset VÀ start timer (gọi khi bấm Space)
gameTimer.resetQuestionTimer = function () {
    gameTimer.stopTimer();
    gameTimer.currentTime = gameTimer.questionTime;
    gameTimer.startTimer();
    console.log("🔄 Timer started:", gameTimer.questionTime, "seconds.");
    return 1;
};

// Set thời gian mỗi câu hỏi (mặc định 10 giây)
gameTimer.setQuestionTime = function (seconds) {
    gameTimer.questionTime = seconds || 10;
    console.log("⚙️ Question time set to:", gameTimer.questionTime, "seconds.");
    return gameTimer.questionTime;
};

gameTimer.getFormattedTime = function () {
    if (gameTimer.currentTime < 0) return "0:00";

    const minutes = Math.floor(gameTimer.currentTime / 60);
    const seconds = gameTimer.currentTime % 60;
    const formattedSeconds = seconds < 10 ? '0' + seconds : seconds;

    return minutes + ':' + formattedSeconds;
};

gameTimer.getCurrentTimeValue = function () {
    return gameTimer.currentTime;
};

// Trả về thời gian hiển thị (luôn = 0 nếu đã hết giờ)
gameTimer.getDisplayTime = function () {
    // Nếu đã hết giờ (state >= 3), luôn trả về 0
    if (tdv_sdk.questionState >= 3) {
        return 0;
    }
    return Math.max(0, gameTimer.currentTime);
};

gameTimer.pauseTimer = function () {
    if (gameTimer.isRunning) {
        clearInterval(gameTimer.intervalId);
        gameTimer.intervalId = null;
        gameTimer.isRunning = false;
        console.log("Timer paused at:", gameTimer.getFormattedTime());
        return 1;
    }
    return 0;
};

gameTimer.resumeTimer = function () {
    if (!gameTimer.isRunning && gameTimer.currentTime > 0) {
        gameTimer.isRunning = true;
        gameTimer.intervalId = setInterval(function () {
            if (gameTimer.currentTime > 0) {
                gameTimer.currentTime--;
            } else {
                gameTimer.stopTimer();
                console.log("Time is up!");
            }
        }, 1000);

        console.log("Timer resumed from:", gameTimer.getFormattedTime());
        return 1;
    }
    return 0;
};

// ==================== GAME SCORE ====================
var gameScore = {};
gameScore.currentScore = 0;

gameScore.addScore = function (points) {
    const pts = parseInt(points) || 0;
    if (pts > 0) {
        gameScore.currentScore += pts;
        console.log(`Score added: ${pts}. New score: ${gameScore.currentScore}`);
    }
    return gameScore.currentScore;
};

gameScore.resetScore = function () {
    gameScore.currentScore = 0;
    console.log("Score reset to 0.");
    return 0;
};

gameScore.getScore = function () {
    return gameScore.currentScore;
};

gameScore.deductScore = function (points) {
    const pts = parseInt(points) || 0;
    if (gameScore.currentScore >= pts) {
        gameScore.currentScore -= pts;
        console.log(`Score deducted: ${pts}. New score: ${gameScore.currentScore}`);
    } else {
        gameScore.currentScore = 0;
        console.log(`Score deducted. New score is 0.`);
    }
    return gameScore.currentScore;
};

// ==================== GAME LIVES ====================
var gameLives = {};
gameLives.maxLives = 3;
gameLives.currentLives = gameLives.maxLives;

gameLives.resetLives = function () {
    gameLives.currentLives = gameLives.maxLives;
    console.log("Lives reset to:", gameLives.maxLives);
    return gameLives.currentLives;
};

gameLives.loseLife = function () {
    if (gameLives.currentLives > 0) {
        gameLives.currentLives--;
        console.log("Lost 1 life. Remaining:", gameLives.currentLives);
    } else {
        console.log("No lives left. Game Over condition.");
    }
    return gameLives.currentLives;
};

gameLives.getLives = function () {
    return gameLives.currentLives;
};

// ==================== INSTRUCTIONS ====================
tdv_sdk.getQuizInstructions = function () {
    const instructions =
        "                            🌟 HƯỚNG DẪN GAME: HÀNH TRÌNH CỦA THỎ 🌟\n\n" +
        "🎯 MỤC TIÊU:\n" +
        "   Giúp chú thỏ đi hết hành trình và đến đích! Trả lời đúng các câu hỏi để ghi thật nhiều điểm trên đường đi.\n\n" +
        "🌀 CÁCH CHƠI:\n" +
        "   1. Lắc xúc xắc: Chạm vào xúc xắc để quay.\n" +
        "   2. Di chuyển: Chú thỏ sẽ đi theo số chấm xuất hiện trên xúc xắc.\n" +
        "   3. Trả lời câu hỏi: Khi chú thỏ dừng lại, chọn đáp án đúng hiển thị trên màn hình.\n" +
        "   4. Tiếp tục hành trình: Sau khi trả lời, bạn có thể quay lại xúc xắc ngay để đi tiếp.\n\n" +
        "💡 ĐIỂM SỐ VÀ THỬ THÁCH:\n" +
        "   ✅ Đúng: +100 điểm.\n" +
        "   ❌ Sai: Không bị trừ điểm hay phạt.\n" +
        "   🐺 Nguy hiểm: Nếu dừng ở ô **'SÓI'** (Wolf), bạn sẽ bị trừ 100 điểm ngay lập tức.\n\n" +
        "🍀 Cùng chú thỏ phiêu lưu, trả lời câu hỏi và ghi thật nhiều điểm trên hành trình nhé!";

    return instructions;
};

tdv_sdk.hasAudio = function () {
    if (!tdv_sdk.curQuestion) return 0;
    var audio = tdv_sdk.curQuestion.audio;
    // Check nếu là mảng và có item
    if (Array.isArray(audio) && audio.length > 0) return 1;
    // Check nếu là string và không rỗng
    if (typeof audio === 'string' && audio.trim() !== '') return 1;
    return 0;
};