#include "WidgetResultados.h"
#include <QVBoxLayout>

WidgetResultados::WidgetResultados(QWidget* parent) : QWidget(parent) {
    setupUI();
}

void WidgetResultados::setupUI() {
    auto* layout = new QVBoxLayout(this);
    layout->setContentsMargins(16, 16, 16, 16);
    layout->setSpacing(12);

    m_lblCampeon = new QLabel;
    m_lblCampeon->setObjectName("lblCampeon");
    m_lblCampeon->setAlignment(Qt::AlignCenter);
    m_lblCampeon->hide();
    layout->addWidget(m_lblCampeon);

    m_log = new QTextEdit;
    m_log->setReadOnly(true);
    m_log->setObjectName("logResultados");
    layout->addWidget(m_log);

    setStyleSheet(R"(
        QWidget { background: #1a1a2e; }
        #lblCampeon {
            background: qlineargradient(x1:0,y1:0,x2:1,y2:0,
                stop:0 #7a3f00, stop:1 #b8860b);
            color: #ffe066;
            font-size: 20px;
            font-weight: bold;
            border-radius: 10px;
            padding: 14px;
        }
        #logResultados {
            background: #0f1e35;
            color: #b0c8e0;
            border: 1px solid #2a3a5a;
            border-radius: 8px;
            font-family: 'Courier New', monospace;
            font-size: 13px;
            padding: 10px;
        }
    )");
}

void WidgetResultados::setTorneo(Torneo* t) { m_torneo = t; }

void WidgetResultados::refresh() {
    m_log->clear();
    if (!m_torneo) {
        m_lblCampeon->hide();
        m_log->setPlaceholderText("Crea un torneo para ver los resultados aquí...");
        return;
    }

    // Campeón
    if (m_torneo->getCampeon()) {
        m_lblCampeon->setText(QString("🏆  Campeón: %1  🏆")
                              .arg(m_torneo->getCampeon()->getAlias()));
        m_lblCampeon->show();
    } else {
        m_lblCampeon->hide();
    }

    // Log de rondas
    QString html;
    html += "<style>"
            "h3 { color: #e94560; margin: 10px 0 4px 0; }"
            ".win  { color: #4ade80; }"
            ".lose { color: #888; }"
            ".bye  { color: #6080a0; font-style: italic; }"
            ".pend { color: #6090b0; }"
            "</style>";

    const auto& rondas = m_torneo->getRondas();
    if (rondas.empty()) {
        html += "<p style='color:#5070a0'>El torneo aún no ha comenzado.</p>";
    } else {
        for (const auto& ronda : rondas) {
            html += QString("<h3>%1</h3>").arg(ronda->getNombre());
            for (const auto& p : ronda->getPartidas()) {
                if (p->isBye()) {
                    html += QString("<div class='bye'>⟳ BYE → %1 pasa a la siguiente ronda</div>")
                            .arg(p->getJugador1() ? p->getJugador1()->getAlias() : "?");
                } else if (p->getEstado() == Partida::Estado::FINALIZADA) {
                    auto g = p->getGanador();
                    auto j1 = p->getJugador1();
                    auto j2 = p->getJugador2();
                    auto perdedor = (g == j1) ? j2 : j1;
                    html += QString("<div>"
                                    "<span class='win'>▲ %1</span>"
                                    " &nbsp;vs&nbsp; "
                                    "<span class='lose'>▼ %2</span>"
                                    " &nbsp;→&nbsp; <b class='win'>%3</b>"
                                    "</div>")
                            .arg(j1 ? j1->getAlias() : "?")
                            .arg(j2 ? j2->getAlias() : "?")
                            .arg(g  ? g->getAlias()  : "?");
                } else {
                    auto j1 = p->getJugador1();
                    auto j2 = p->getJugador2();
                    html += QString("<div class='pend'>◌ %1 vs %2  [pendiente]</div>")
                            .arg(j1 ? j1->getAlias() : "?")
                            .arg(j2 ? j2->getAlias() : "?");
                }
            }
        }
    }
    m_log->setHtml(html);
}
