/**
 * Mappers Kit
 * Helper functions to transform data between Client App and Game Iframe
 */
export function prepareCompletedQuestions(answeredQuestions) {
    return (answeredQuestions || []).map(a => ({
        id: a.id || a.questionId,
        result: (a.isCorrect || a.result === 1) ? 1 : 0,
    }));
}
export function createGamePayload(options) {
    const { gameId, userId, gameData, answeredQuestions = [], endTimeIso } = options;
    const completed_question_ids = prepareCompletedQuestions(answeredQuestions);
    // Ưu tiên lấy field .questions hoặc .data, hoặc dùng chính gameData nếu nó là mảng
    let data = [];
    if (Array.isArray(gameData)) {
        data = gameData;
    }
    else if (gameData && Array.isArray(gameData.questions)) {
        data = gameData.questions;
    }
    else if (gameData && Array.isArray(gameData.data)) {
        data = gameData.data;
    }
    const payload = {
        game_id: gameId,
        user_id: userId,
        data: data,
        completed_question_ids: completed_question_ids,
        // Merge các field metadata khác
        ...(typeof gameData === 'object' && !Array.isArray(gameData) ? gameData : {}),
        // Merge extraData
        ...(options.extraData || {})
    };
    // Inject end_time_iso (absolute timestamp for accurate sync)
    if (endTimeIso) {
        payload.end_time_iso = endTimeIso;
    }
    return payload;
}
export function createLeaderboardPayload(apiData) {
    const topPlayers = apiData.topPlayers || [];
    const userRank = apiData.userRank || null;
    return {
        top_players: topPlayers.map((p) => ({
            rank: p.rank,
            name: p.name || p.studentName || p.user_id,
            score: p.score ?? p.finalScore ?? 0,
            student_id: p.studentId || p.userId,
            time_spent: p.timeSpent ?? p.time_spent ?? 0,
            completed_at: p.completedAt
        })),
        user_rank: userRank ? {
            rank: userRank.rank,
            name: userRank.name || userRank.studentName,
            score: userRank.score ?? userRank.finalScore ?? 0,
            student_id: userRank.studentId || userRank.userId,
            time_spent: userRank.timeSpent ?? userRank.time_spent ?? 0,
            completed_at: userRank.completedAt
        } : null,
    };
}
export function normalizeAnswerReport(data) {
    // Simplified per user request
    // Input: { question_id: "Q1", result: 1, choice: "2" }
    return {
        question_id: data.question_id || data.questionId || data.id,
        choice: data.choice ?? data.selected_answer ?? data.selectedAnswer,
        result: data.result ?? (data.is_correct ? 1 : 0),
        is_correct: !!(data.result === 1 || data.is_correct === true),
        time_spent: data.time_spent ?? 5,
        is_timeout: !!data.is_timeout
    };
}
//# sourceMappingURL=mappers.js.map