#include <stdio.h>

#include "game.h"

const char* nombrePalo(uint8_t palo) {
    switch(palo) {

        case PALO_ESPADA:
            return "Espada";

        case PALO_BASTO:
            return "Basto";

        case PALO_ORO:
            return "Oro";

        case PALO_COPA:
            return "Copa";
    }

    return "?";
}

const char* jugador_o_equipo(uint8_t jugadores) {
    switch(jugadores) {
        case 2:
            return "Jugador";
    }

    return "Equipo";
}

int main(){

    uint8_t jugadores = 2;

    printf("\nInserte número de jugadores: ");
    scanf("%u", &jugadores);

    EstadoPartida partida;

    if(!iniciar_partida(&partida, jugadores, 15)){
        printf("Número inválido de jugadores.\n");
        return 1;
    }

    while(1){
        uint8_t numero_jugador = partida.jugador_turno_actual+1;
        printf("Turno de jugador %d \n", numero_jugador);

        for(uint8_t carta_i = 0; carta_i < 3; carta_i++){
            uint8_t carta = partida.jugadores_cartas[partida.jugador_turno_actual][carta_i];
            if(carta == CARTA_INVALIDA) continue;
            printf("%u: %u de %s\n",
                carta_i,
                cartas[carta].valor_carta,
                nombrePalo(cartas[carta].palo)
            );
        }

        printf("\nCarta a jugar: ");

        uint8_t carta_posicion_mano = 0;

        scanf("%u", &carta_posicion_mano);

        ResultadoJugada resultado_jugada = jugar_baza(&partida, partida.jugador_turno_actual, carta_posicion_mano);

        uint8_t carta_jugada_i = resultado_jugada.carta;

        if(carta_jugada_i == CARTA_INVALIDA){
            printf("Carta inválida\n\n");
            continue;
        }

        if(resultado_jugada.evento == EVENTO_JUGADA_INVALIDA) printf("Jugada inválida\n\n");

        printf("Jugador %u jugó: %u de %s\n\n", numero_jugador, cartas[carta_jugada_i].valor_carta, nombrePalo(cartas[carta_jugada_i].palo));

        switch(resultado_jugada.evento){
            case EVENTO_RONDA_TERMINADA:
                printf("%s %u gana la ronda.\n\n", jugador_o_equipo(jugadores), resultado_jugada.equipo_ganador+1);
                
                printf("%s 1: %u puntos === %s 2: %u puntos\n\n", jugador_o_equipo(jugadores), partida.equipos_puntos[0],
                jugador_o_equipo(jugadores), partida.equipos_puntos[1]);
                break;
            case EVENTO_VICTORIA:
                printf("%s %u gana la partida.\n\n", jugador_o_equipo(jugadores), resultado_jugada.equipo_ganador+1);
            default:
                break;
        }
    }

    return 0;
}