select 'shell' as component,
    *
FROM shell;

-- Game over, questions breakdown
select 'card' as component,
    2 AS columns,
    'The game is over' as title,
    'Breaking down the results per question' as description;
SELECT question_text as title,
    'The true answer was ' || true_answer || '. ' || impostor || ' tried to make everyone think it was ' || wrong_answer || '. ' || (
        select group_concat(
                player_name || ' voted ' || answer_value || CASE
                    WHEN abs(answer_value - true_answer) < abs(answer_value - wrong_answer)
                    THEN ' and earned a point'
                    WHEN player_name = impostor
                    THEN ' and did not earn a point'
                    ELSE ' and gave a point to ' || impostor
                END,
                ', '
            )
        from answers
        where answers.game_id = $game_id::integer
            and answers.question_id = questions.id
    ) || '.' as description,
    explanation as footer
FROM game_questions
    JOIN questions ON game_questions.question_id = questions.id
WHERE game_id = $game_id::integer
ORDER BY game_order;

-- Point count
SELECT 'chart' as component,
    'Scores' as title,
    'bar' as type;
SELECT name as label,
    (
        select sum(
                (players.name = player_name AND NOT impostor_won)
                OR (players.name != player_name AND players.name = impostor AND impostor_won)
            )
        FROM game_results WHERE game_id = $game_id
    ) as value
FROM players
WHERE game_id = $game_id::integer
ORDER BY value DESC;