#include "PantallaInicio.h"
#include "ui_PantallaInicio.h"
#include <QButtonGroup>
#include <QListWidgetItem>
#include <QDir>
#include <QMessageBox>

PantallaInicio::PantallaInicio(QWidget* parent)
    : QWidget(parent), ui(new Ui::PantallaInicio)
{
    ui->setupUi(this);
    setupUI();
    aplicarEstilo();
    cargarListaGuardados();
}

PantallaInicio::~PantallaInicio() { delete ui; }

void PantallaInicio::setupUI() {
    // Grupo exclusivo para los botones de plantilla
    m_grupoPlantillas = new QButtonGroup(this);
    m_grupoPlantillas->addButton(ui->btnPlantillaSimple, 0);
    m_grupoPlantillas->addButton(ui->btnPlantillaDoble,  1);
    m_grupoPlantillas->setExclusive(true);
    ui->btnPlantillaSimple->setChecked(true);

    connect(ui->btnCrear,          &QPushButton::clicked, this, &PantallaInicio::onCrear);
    connect(ui->listaTorneosGuardados, &QListWidget::itemSelectionChanged,
            this, &PantallaInicio::onSeleccionarGuardado);
    connect(ui->btnCargarGuardado, &QPushButton::clicked, this, &PantallaInicio::onCargarGuardado);
}

void PantallaInicio::onCrear() {
    QString nombre = ui->edNombre->text().trimmed();
    QString juego  = ui->edJuego->text().trimmed();
    if (nombre.isEmpty() || juego.isEmpty()) {
        QMessageBox::warning(this, "Campos incompletos",
            "Por favor ingresa el nombre del torneo y el juego.");
        return;
    }
    int id = m_grupoPlantillas->checkedId();
    auto tipo = (id == 1)
        ? TorneoFactory::TipoTorneo::DOBLE_ELIMINACION
        : TorneoFactory::TipoTorneo::ELIMINATORIO_SIMPLE;
    emit torneoCreado(nombre, juego, tipo);
}

void PantallaInicio::onSeleccionarGuardado() {
    ui->btnCargarGuardado->setEnabled(
        !ui->listaTorneosGuardados->selectedItems().isEmpty());
}

void PantallaInicio::onCargarGuardado() {
    auto items = ui->listaTorneosGuardados->selectedItems();
    if (items.isEmpty()) return;
    QString ruta = items.first()->data(Qt::UserRole).toString();
    if (!ruta.isEmpty()) emit torneoSolicitadoCarga(ruta);
}

void PantallaInicio::cargarListaGuardados() {
    ui->listaTorneosGuardados->clear();
    // Buscar archivos .json en el directorio de trabajo
    QDir dir(QDir::homePath() + "/TorneosMesa");
    if (!dir.exists()) { dir.mkpath("."); }
    const auto archivos = dir.entryInfoList({"*.json"}, QDir::Files, QDir::Time);
    for (const auto& fi : archivos) {
        auto* item = new QListWidgetItem(fi.baseName());
        item->setData(Qt::UserRole, fi.absoluteFilePath());
        ui->listaTorneosGuardados->addItem(item);
    }
    if (archivos.isEmpty()) {
        auto* item = new QListWidgetItem("(sin torneos guardados)");
        item->setFlags(item->flags() & ~Qt::ItemIsSelectable);
        ui->listaTorneosGuardados->addItem(item);
    }
}

void PantallaInicio::aplicarEstilo() {
    setStyleSheet(R"(
        PantallaInicio { background:#1a1a2e; }
        QLabel { color:#b0c4d8; font-size:13px; }
        QLabel#lblTitulo { color:#e0e8ff; font-size:22px; font-weight:bold; }
        QLabel#lblSubtitulo { color:#708090; font-size:13px; }
        QLabel#lblSeccionPlantillas, QLabel#lblSeccionGuardados {
            color:#5a7090; font-size:11px; letter-spacing:1px;
        }
        QLineEdit {
            background:#0f1e3a; color:#d0e0f0;
            border:1px solid #2a3a5a; border-radius:8px;
            padding:8px 12px; font-size:13px;
        }
        QLineEdit:focus { border-color:#378add; }
        QPushButton#btnPlantillaSimple, QPushButton#btnPlantillaDoble {
            background:#16213e; color:#8090a0;
            border:1px solid #2a3a5a; border-radius:10px;
            font-size:12px; padding:12px 8px;
            text-align:center;
        }
        QPushButton#btnPlantillaSimple:checked, QPushButton#btnPlantillaDoble:checked {
            background:#0f2a4a; color:#60a8e0;
            border:2px solid #378add;
        }
        QPushButton#btnPlantillaSimple:hover, QPushButton#btnPlantillaDoble:hover {
            background:#1a2a4a; color:#90b8d0;
        }
        QPushButton#btnCrear {
            background:#185fa5; color:#e6f1fb;
            border:none; border-radius:8px;
            font-size:14px; font-weight:bold; padding:10px;
        }
        QPushButton#btnCrear:hover { background:#2070c0; }
        QPushButton#btnCargarGuardado {
            background:#16213e; color:#80a0c0;
            border:1px solid #2a3a5a; border-radius:8px;
            font-size:13px; padding:8px;
        }
        QPushButton#btnCargarGuardado:enabled { color:#90c0e0; border-color:#378add; }
        QPushButton#btnCargarGuardado:hover:enabled { background:#0f2a4a; }
        QListWidget {
            background:#0f1e35; color:#8090a8;
            border:1px solid #2a3a5a; border-radius:8px;
            font-size:13px;
        }
        QListWidget::item { padding:8px 12px; border-bottom:1px solid #1a2a3a; }
        QListWidget::item:selected { background:#0f3060; color:#90c0e0; }
        QListWidget::item:hover { background:#1a2a4a; }
        QFrame#separador { color:#2a3a5a; }
    )");
}
