var tdv_sdk = {};
tdv_sdk.list = [
    // ==================== PART 1: MULTIPLE CHOICE (Q1-Q10) - DỄ → TRUNG BÌNH ====================
    {
        "id": 1,
        "question": "Choose the correct greeting sentence.",
        "options": ["My name Rosy.", "Hello, my name is Tim.", "Name is Billy.", "I class Tim."],
        "answer": "Hello, my name is Tim.",
        "audio": ""
    },
    {
        "id": 2,
        "question": "Which word is a day of the week?",
        "options": ["teacher", "hospital", "Monday", "pilot"],
        "answer": "Monday",
        "audio": ""
    },
    {
        "id": 3,
        "question": "Which sentence is correct?",
        "options": ["Today is Tuesday.", "Today Tuesday is.", "Today are Tuesday.", "Tuesday today."],
        "answer": "Today is Tuesday.",
        "audio": ""
    },
    {
        "id": 4,
        "question": "Which job puts out fires?",
        "options": ["doctor", "pilot", "firefighter", "teacher"],
        "answer": "firefighter",
        "audio": ""
    },
    {
        "id": 5,
        "question": "Which word is a person?",
        "options": ["airport", "student", "hospital", "office"],
        "answer": "student",
        "audio": ""
    },
    {
        "id": 6,
        "question": "A police officer works at a ___.",
        "options": ["hospital", "police station", "airport", "store"],
        "answer": "police station",
        "audio": ""
    },
    {
        "id": 7,
        "question": "Which sentence is correct?",
        "options": ["He work at a farm.", "He works at a farm.", "He working at a farm.", "He is work farm."],
        "answer": "He works at a farm.",
        "audio": ""
    },
    {
        "id": 8,
        "question": "Which word starts with the /n/ sound?",
        "options": ["octopus", "parrot", "nest", "sofa"],
        "answer": "nest",
        "audio": ""
    },
    {
        "id": 9,
        "question": "Which food is NOT fast food?",
        "options": ["fries", "pizza", "chicken", "soup"],
        "answer": "soup",
        "audio": ""
    },
    {
        "id": 10,
        "question": "Which number comes after twenty-nine?",
        "options": ["twenty", "thirty", "forty", "nineteen"],
        "answer": "thirty",
        "audio": ""
    },
    // ==================== PART 2: FILL IN THE BLANKS (Q11-Q20) - TRUNG BÌNH → KHÓ ====================
    {
        "id": 11,
        "question": "She is a ___. She works in a hospital.",
        "options": ["pilot", "doctor", "farmer", "student"],
        "answer": "doctor",
        "audio": ""
    },
    {
        "id": 12,
        "question": "He works at the ___. He flies planes.",
        "options": ["hospital", "airport", "farm", "bank"],
        "answer": "airport",
        "audio": ""
    },
    {
        "id": 13,
        "question": "Choose the correct sentence.",
        "options": ["Does he work at the police station?", "Does he works at the police station?", "Do he work at the police station?", "He does work police station?"],
        "answer": "Does he work at the police station?",
        "audio": ""
    },
    {
        "id": 14,
        "question": "Which word has the /o/ sound?",
        "options": ["nest", "pen", "octopus", "queen"],
        "answer": "octopus",
        "audio": ""
    },
    {
        "id": 15,
        "question": "Would you like ___ pizza?",
        "options": ["a", "an", "some", "any"],
        "answer": "some",
        "audio": ""
    },
    {
        "id": 16,
        "question": "Which number is correct?",
        "options": ["twenty-ten", "twenty-five", "two-five", "five-teen"],
        "answer": "twenty-five",
        "audio": ""
    },
    {
        "id": 17,
        "question": "Which subject do you learn in the computer room?",
        "options": ["art", "English", "math", "computer class"],
        "answer": "computer class",
        "audio": ""
    },
    {
        "id": 18,
        "question": "Choose the correct sentence.",
        "options": ["We has English today.", "We have English today.", "We are have English today.", "We English have."],
        "answer": "We have English today.",
        "audio": ""
    },
    {
        "id": 19,
        "question": "Which word has the /t/ sound?",
        "options": ["umbrella", "van", "tiger", "sofa"],
        "answer": "tiger",
        "audio": ""
    },
    {
        "id": 20,
        "question": "They are ___ at the beach.",
        "options": ["fun", "having fun", "have fun", "has fun"],
        "answer": "having fun",
        "audio": ""
    },
    // ==================== PART 3: LISTENING (Q21-Q30) - TRICKY VERSION ====================
    {
        "id": 21,
        "question": "What day is it today?",
        "options": ["Tuesday", "Wednesday", "Monday", "Friday"],
        "answer": "Monday",
        "audio": "https://audio.senaai.tech/audio/Sena_Voice1_hello_my_name_is_rosy_today_is_monday_not_tuesday__7d7a945b.mp3"
    },
    {
        "id": 22,
        "question": "What is his dad's job?",
        "options": ["nurse", "doctor", "firefighter", "teacher"],
        "answer": "doctor",
        "audio": "https://audio.senaai.tech/audio/Sena_Voice1_my_dad_works_with_sick_people_he_is_not_a_nurse_he_3445a113.mp3"
    },
    {
        "id": 23,
        "question": "Where does his uncle work?",
        "options": ["fire station", "hospital", "police station", "airport"],
        "answer": "police station",
        "audio": "https://audio.senaai.tech/audio/Sena_Voice1_my_uncle_is_a_police_officer_he_does_not_work_at_a_9b07be1a.mp3"
    },
    {
        "id": 24,
        "question": "What does the speaker eat?",
        "options": ["fries", "pizza", "noodles", "bubble tea"],
        "answer": "noodles",
        "audio": "https://audio.senaai.tech/audio/Sena_Voice1_i_like_food_i_eat_noodles_and_chicken_i_dont_eat_f_eceb4c77.mp3"
    },
    {
        "id": 25,
        "question": "Which number does the speaker say last?",
        "options": ["twenty-one", "twenty-two", "twenty-three", "twenty-four"],
        "answer": "twenty-three",
        "audio": "https://audio.senaai.tech/audio/Sena_Voice1_i_can_count_numbers_twenty_twentyone_twentytwo_twe_ba2066af.mp3"
    },
    {
        "id": 26,
        "question": "Where are they?",
        "options": ["classroom", "art room", "computer room", "school yard"],
        "answer": "school yard",
        "audio": "https://audio.senaai.tech/audio/Sena_Voice1_we_have_pe_today_we_are_running_in_the_school_yard_6679f1d4.mp3"
    },
    {
        "id": 27,
        "question": "What does the speaker do?",
        "options": ["surf", "swim", "read", "run"],
        "answer": "read",
        "audio": "https://audio.senaai.tech/audio/Sena_Voice1_at_the_beach_i_read_a_book_my_brother_surfs_we_do__a0931cd3.mp3"
    },
    {
        "id": 28,
        "question": "Which animal is funny?",
        "options": ["crocodile", "zebra", "penguin", "camel"],
        "answer": "penguin",
        "audio": "https://audio.senaai.tech/audio/Sena_Voice1_look_at_the_animals_the_penguin_is_funny_the_croco_4749f036.mp3"
    },
    {
        "id": 29,
        "question": "What does the speaker NOT do?",
        "options": ["wear a hat", "take a photo", "write in a notebook", "stand"],
        "answer": "write in a notebook",
        "audio": "https://audio.senaai.tech/audio/Sena_Voice1_i_wear_a_hat_i_take_a_photo_i_do_not_write_in_a_no_3abf4853.mp3"
    },
    {
        "id": 30,
        "question": "What subject do they have?",
        "options": ["Math", "Art", "English", "P.E"],
        "answer": "English",
        "audio": "https://audio.senaai.tech/audio/Sena_Voice1_we_have_english_not_math_we_are_in_the_computer_ro_145be091.mp3"
    },
    // ==================== PART 4: TET BACK-UP (Q31-Q40) ====================
    {
        "id": 31,
        "question": "We see many apricot blossoms at Tet in the South of Vietnam. What 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": "Square glutinous rice cake is a traditional food at Tet. 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)
// QUAN TRỌNG: Reset timer về 15s và KHÔNG start - chờ Space mới start
tdv_sdk.startQuestion = function () {
    // Dừng timer cũ nếu đang chạy
    gameTimer.stopTimer();
    // Reset timer về giá trị ban đầu (15s) nhưng KHÔNG start
    gameTimer.currentTime = gameTimer.questionTime;
    // Set state = 1 (chờ Space để start timer)
    tdv_sdk.questionState = 1;
    console.log("❓ Question ready! Timer set to", gameTimer.questionTime, "s. Press Space to start.");
    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.65;  // Scale nhỏ nhất
    var maxScale = 1;  // 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.9;               // 9-10 ký tự
    if (len <= 12) return 0.85;               // 11-12 ký tự
    if (len <= 14) return 0.8;               // 13-14 ký tự (Lunar New Year)
    if (len <= 18) return 0.75;               // 15-18 ký tự
    if (len <= 22) return 0.7;                // 19-22 ký tự
    return 0.65;                              // > 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.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ự
    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
};

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;
};

// Check xem game đã kết thúc chưa (trả về 1 nếu hết câu hỏi, 0 nếu còn)
// Dùng trong Construct: If Browser.ExecJS("tdv_sdk.isGameOver()") = 1 → Game Over
tdv_sdk.isGameOver = function () {
    return tdv_sdk.currentIndex >= tdv_sdk.totalquestion ? 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;
};

// Tất cả 4 đáp án sẽ có cùng kích thước chữ
tdv_sdk.getUniformScale = function () {
    if (!tdv_sdk.curQuestion) return 1;

    var options = tdv_sdk.curQuestion.options;
    var maxLen = 0;

    // Tìm độ dài của đáp án dài nhất
    for (var i = 0; i < options.length; i++) {
        var len = String(options[i] || "").length;
        if (len > maxLen) maxLen = len;
    }

    // Tính scale dựa trên đáp án dài nhất
    if (maxLen <= 8) return 1;
    if (maxLen <= 10) return 0.95;
    if (maxLen <= 12) return 0.9;
    if (maxLen <= 14) return 0.85;
    if (maxLen <= 18) return 0.8;
    if (maxLen <= 22) return 0.75;
    return 0.7;
};


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;
};