#pragma once

#include <cstdint>

namespace GameConfig {

// Mode de joc
enum class Mode {
    NORMAL,  // Partida normal
    DEMO     // Mode demostració (futur)
};

// Configuració d'una partida
struct ConfigPartida {
        bool jugador1_actiu{false};  // És actiu el jugador 1?
        bool jugador2_actiu{false};  // És actiu el jugador 2?
        Mode mode{Mode::NORMAL};     // Mode de joc

        // Mètodes auxiliars

        // Retorna true si només hi ha un jugador actiu
        [[nodiscard]] bool es_un_jugador() const {
            return (jugador1_actiu && !jugador2_actiu) ||
                (!jugador1_actiu && jugador2_actiu);
        }

        // Retorna true si hi ha dos jugadors actius
        [[nodiscard]] bool son_dos_jugadors() const {
            return jugador1_actiu && jugador2_actiu;
        }

        // Retorna true si no hi ha cap jugador actiu
        [[nodiscard]] bool cap_jugador() const {
            return !jugador1_actiu && !jugador2_actiu;
        }

        // Compte de jugadors actius (0, 1 o 2)
        [[nodiscard]] uint8_t compte_jugadors() const {
            return (jugador1_actiu ? 1 : 0) + (jugador2_actiu ? 1 : 0);
        }

        // Retorna l'ID de l'únic jugador actiu (0 o 1)
        // Només vàlid si es_un_jugador() retorna true
        [[nodiscard]] uint8_t id_unic_jugador() const {
            if (jugador1_actiu && !jugador2_actiu) {
                return 0;
            }
            if (!jugador1_actiu && jugador2_actiu) {
                return 1;
            }
            return 0;  // Fallback (cal comprovar es_un_jugador() primer)
        }
};

}  // namespace GameConfig
