#include "chatwindow.h"
#include "ui_chatwindow.h"
#include <QDateTime>
#include <QFile>
#include <QTextStream>
#include <QDebug>

ChatWindow::ChatWindow(Usuario *usuarioActual, Usuario *otroUsuario, QWidget *parent)
    : QDialog(parent), ui(new Ui::ChatWindow),
    m_usuarioActual(usuarioActual), m_otroUsuario(otroUsuario)
{
    ui->setupUi(this);

    // Configurar ventana
    setWindowTitle("Chat con " + otroUsuario->getNombre());
    resize(500, 400);

    // Configurar etiquetas
    ui->labelNombre->setText("Chat con: " + otroUsuario->getNombre());
    ui->labelCarrera->setText("Carrera: " + otroUsuario->getCarrera());

    // Obtener nombre de archivo para este chat
    m_archivoChat = obtenerNombreArchivoChat();

    // Cargar mensajes existentes
    cargarMensajes();

    // Conectar señales
    connect(ui->btnEnviar, &QPushButton::clicked, this, &ChatWindow::on_btnEnviar_clicked);
}

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

QString ChatWindow::obtenerNombreArchivoChat()
{
    // Generar nombre de archivo basado en los IDs o nombres de usuario
    QString usuario1 = m_usuarioActual->getNombre().toLower().replace(" ", "_");
    QString usuario2 = m_otroUsuario->getNombre().toLower().replace(" ", "_");

    // Ordenar alfabéticamente para que sea consistente
    if (usuario1 > usuario2) {
        qSwap(usuario1, usuario2);
    }

    return QString("chat_%1_%2.txt").arg(usuario1, usuario2);
}

void ChatWindow::on_btnEnviar_clicked()
{
    QString mensaje = ui->txtMensaje->toPlainText().trimmed();
    if (!mensaje.isEmpty()) {
        agregarMensaje(mensaje, true);
        guardarMensaje(mensaje, true);
        ui->txtMensaje->clear();
    }
}

void ChatWindow::guardarMensaje(const QString &mensaje, bool esPropio)
{
    QFile file(m_archivoChat);
    if (file.open(QIODevice::Append | QIODevice::Text)) {
        QTextStream stream(&file);
        stream << (esPropio ? "YO" : "OTRO") << "|"
               << QDateTime::currentDateTime().toString(Qt::ISODate) << "|"
               << mensaje << "\n";
        file.close();
    }
}

void ChatWindow::cargarMensajes()
{
    QFile file(m_archivoChat);
    if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
        QTextStream in(&file);
        while (!in.atEnd()) {
            QString linea = in.readLine();
            QStringList partes = linea.split("|");
            if (partes.size() == 3) {
                bool esPropio = (partes[0] == "YO");
                QString mensaje = partes[2];
                agregarMensaje(mensaje, esPropio);
            }
        }
        file.close();
    }
}

void ChatWindow::agregarMensaje(const QString &mensaje, bool esPropio)
{
    QString hora = QDateTime::currentDateTime().toString("hh:mm");
    QString remitente = esPropio ? "Tú" : m_otroUsuario->getNombre();
    QString mensajeFormateado = QString("[%1] %2: %3")
                                    .arg(hora)
                                    .arg(remitente)
                                    .arg(mensaje);

    // Aplicar formato diferente para mensajes propios y ajenos
    if (esPropio) {
        mensajeFormateado = "<span style='color:blue;'>" + mensajeFormateado + "</span>";
    } else {
        mensajeFormateado = "<span style='color:green;'>" + mensajeFormateado + "</span>";
    }

    ui->txtChat->append(mensajeFormateado);
}
