#include "JugadorChip.h"
#include <QHBoxLayout>
#include <QMouseEvent>

JugadorChip::JugadorChip(std::shared_ptr<Jugador> jugador, QWidget* parent)
    : QWidget(parent), m_jugador(jugador)
{
    setupUI();
    aplicarEstilo(false);
}

void JugadorChip::setupUI() {
    auto* lay = new QHBoxLayout(this);
    lay->setContentsMargins(10, 4, 6, 4);
    lay->setSpacing(4);

    m_lblNombre = new QLabel(m_jugador->getAlias());
    m_lblNombre->setObjectName("chipLabel");
    m_lblNombre->setCursor(Qt::IBeamCursor);

    m_edNombre = new QLineEdit(m_jugador->getAlias());
    m_edNombre->setObjectName("chipEdit");
    m_edNombre->setFrame(false);
    m_edNombre->hide();

    m_btnX = new QPushButton("✕");
    m_btnX->setObjectName("chipBtnX");
    m_btnX->setFixedSize(18, 18);
    m_btnX->setCursor(Qt::PointingHandCursor);

    m_btnOk = new QPushButton("✓");
    m_btnOk->setObjectName("chipBtnOk");
    m_btnOk->setFixedSize(18, 18);
    m_btnOk->setCursor(Qt::PointingHandCursor);
    m_btnOk->hide();

    lay->addWidget(m_lblNombre);
    lay->addWidget(m_edNombre);
    lay->addWidget(m_btnOk);
    lay->addWidget(m_btnX);

    connect(m_btnX,  &QPushButton::clicked, this, &JugadorChip::onEliminar);
    connect(m_btnOk, &QPushButton::clicked, this, &JugadorChip::onConfirmar);
    connect(m_lblNombre, &QLabel::linkActivated, this, [this](){ onClickLabel(); });
    connect(m_edNombre, &QLineEdit::returnPressed, this, &JugadorChip::onConfirmar);

    m_lblNombre->installEventFilter(this);
}

bool JugadorChip::eventFilter(QObject* obj, QEvent* ev) {
    if (obj == m_lblNombre && ev->type() == QEvent::MouseButtonDblClick && m_editable && !m_eliminado) {
        onClickLabel();
        return true;
    }
    return QWidget::eventFilter(obj, ev);
}

void JugadorChip::onClickLabel() {
    if (!m_editable || m_eliminado) return;
    m_editando = true;
    m_edNombre->setText(m_lblNombre->text());
    m_lblNombre->hide();
    m_edNombre->show();
    m_btnX->hide();
    m_btnOk->show();
    m_edNombre->setFocus();
    m_edNombre->selectAll();
    aplicarEstilo(false);
}

void JugadorChip::onConfirmar() {
    QString nuevo = m_edNombre->text().trimmed();
    if (!nuevo.isEmpty()) {
        m_lblNombre->setText(nuevo);
        emit nombreCambiado(m_jugador->getId(), nuevo);
    }
    m_editando = false;
    m_edNombre->hide();
    m_btnOk->hide();
    m_lblNombre->show();
    m_btnX->show();
    aplicarEstilo(m_eliminado);
}

void JugadorChip::onEliminar() {
    emit solicitudEliminar(m_jugador->getId());
}

void JugadorChip::setEliminado(bool elim) {
    m_eliminado = elim;
    m_btnX->setVisible(!elim);
    aplicarEstilo(elim);
}

void JugadorChip::setEditable(bool editable) {
    m_editable = editable;
    if (!editable) {
        m_btnX->setVisible(false);
    }
}

void JugadorChip::aplicarEstilo(bool eliminado) {
    if (m_editando) {
        setStyleSheet(R"(
            JugadorChip { background:#0f3460; border:1px solid #378add; border-radius:14px; }
            QLineEdit#chipEdit { background:transparent; color:#a0c8ff; font-size:12px; min-width:70px; }
            QPushButton#chipBtnOk { background:#27ae60; color:white; border:none; border-radius:9px; font-size:10px; }
        )");
    } else if (eliminado) {
        setStyleSheet(R"(
            JugadorChip { background:#2a1a1a; border:0.5px solid #5a2a2a; border-radius:14px; }
            QLabel#chipLabel { color:#6a3a3a; font-size:12px; text-decoration:line-through; }
        )");
    } else {
        setStyleSheet(R"(
            JugadorChip { background:#16213e; border:0.5px solid #2a3a5a; border-radius:14px; }
            JugadorChip:hover { background:#1a2a4e; border-color:#4a6a9a; }
            QLabel#chipLabel { color:#b0c8e0; font-size:12px; }
            QPushButton#chipBtnX { background:transparent; color:#607090; border:none; font-size:10px; border-radius:9px; }
            QPushButton#chipBtnX:hover { background:#3a1a1a; color:#e94560; }
        )");
    }
}
