#pragma once
#include "Jugador.h"
#include <memory>

// ──────────────────────────────────────────────
//  Clase Partida
//  Representa un enfrentamiento 1 vs 1 dentro de
//  una ronda del torneo eliminatorio.
// ──────────────────────────────────────────────
class Partida {
public:
    enum class Estado { PENDIENTE, EN_CURSO, FINALIZADA, BYE };

    Partida() = default;
    Partida(std::shared_ptr<Jugador> j1, std::shared_ptr<Jugador> j2);
    // BYE: jugador pasa sin rival
    explicit Partida(std::shared_ptr<Jugador> bye);

    // Getters
    std::shared_ptr<Jugador> getJugador1()  const { return m_j1; }
    std::shared_ptr<Jugador> getJugador2()  const { return m_j2; }
    std::shared_ptr<Jugador> getGanador()   const { return m_ganador; }
    Estado getEstado() const { return m_estado; }
    bool   isBye()     const { return m_estado == Estado::BYE; }

    // Acciones
    void iniciar();
    void registrarResultado(std::shared_ptr<Jugador> ganador);
    void resetear();

    // Info
    QString descripcion() const;

private:
    std::shared_ptr<Jugador> m_j1;
    std::shared_ptr<Jugador> m_j2;
    std::shared_ptr<Jugador> m_ganador;
    Estado m_estado = Estado::PENDIENTE;
};
