#pragma once

#include <cstdint>

namespace GameConfig {

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

// Configuración de una match
struct MatchConfig {
        bool jugador1_actiu{false};  // Es active el player 1?
        bool jugador2_actiu{false};  // Es active el player 2?
        Mode mode{Mode::NORMAL};     // Mode de juego

        // Métodos auxiliars

        // Retorna true si solo hay un player active
        [[nodiscard]] bool es_un_jugador() const {
            return (jugador1_actiu && !jugador2_actiu) ||
                (!jugador1_actiu && jugador2_actiu);
        }

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

        // Retorna true si no hay sin player active
        [[nodiscard]] bool cap_jugador() const {
            return !jugador1_actiu && !jugador2_actiu;
        }

        // Compte de jugadors active (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 player active (0 o 1)
        // Solo 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 (necesario comprovar es_un_jugador() primer)
        }
};

}  // namespace GameConfig
