// Eliminación en un campeonato de vóley sin empates. Los equipos son inventados.
#include <iostream>
#include <vector>

#include "baseball.h"

int main() {
    //                       0: Lima 1: Cusco 2: Ica 3: Piura 4: Callao
    Championship league{{"Lima", "Cusco", "Ica", "Piura", "Callao"},
                        {27, 26, 26, 25, 20},
                        {{0, 2, 2, 0, 0},
                         {2, 0, 2, 0, 0},
                         {2, 2, 0, 0, 0},
                         {0, 0, 0, 0, 3},
                         {0, 0, 0, 3, 0}}};
    std::cout << "equipo   ganados  faltan  máximo  ¿eliminado?\n";
    for (int x = 0; x < 5; x++) {
        Elimination result = check_team(league, x);
        std::cout << league.names[static_cast<std::size_t>(x)];
        for (std::size_t k = league.names[static_cast<std::size_t>(x)].size(); k < 9; k++) std::cout << ' ';
        std::cout << league.wins[static_cast<std::size_t>(x)] << "       " << remaining_of(league, x) << "       "
                  << result.best << "      ";
        if (!result.eliminated) {
            std::cout << "no (flujo " << result.flow << " de " << result.games_left << ")\n";
        } else if (result.trivial) {
            std::cout << "sí, a simple vista: "
                      << league.names[static_cast<std::size_t>(result.certificate[0])] << " ya lo pasó\n";
        } else {
            std::cout << "sí (flujo " << result.flow << " de " << result.games_left << ")\n";
        }
    }

    Elimination piura = check_team(league, 3);
    std::cout << "\nPiura: el grupo que lo elimina es";
    long long total = 0;
    for (int i : piura.certificate) {
        std::cout << ' ' << league.names[static_cast<std::size_t>(i)];
        total += league.wins[static_cast<std::size_t>(i)];
    }
    std::cout << "\n  victorias ya ganadas: " << total << '\n';
    long long inside = 0;
    for (std::size_t a = 0; a < piura.certificate.size(); a++) {
        for (std::size_t b = a + 1; b < piura.certificate.size(); b++) {
            inside += league.games[static_cast<std::size_t>(piura.certificate[a])]
                                  [static_cast<std::size_t>(piura.certificate[b])];
        }
    }
    std::cout << "  partidos entre ellos: " << inside << '\n';
    std::cout << "  máximo para que nadie pase a Piura: " << piura.certificate.size() << " x " << piura.best << " = "
              << static_cast<long long>(piura.certificate.size()) * piura.best << '\n';
    std::cout << "  fuerza bruta, ¿puede quedar primero?: " << (brute_can_finish_first(league, 3) ? "sí" : "no") << '\n';
}
