// =============================================================
// auth.js — Login, Registro Postulante y Registro Empresa
// js/auth.js
// =============================================================

const API_URL = 'http://localhost:8081/api';

document.addEventListener('DOMContentLoaded', () => {

    // ==========================================================
    // REGISTRO POSTULANTE
    // ==========================================================
    const formRegistro = document.getElementById('formRegistro');

    formRegistro.addEventListener('submit', async (e) => {
        e.preventDefault();

        const nombre    = document.getElementById('reg_nombre').value.trim();
        const apellidos = document.getElementById('reg_apellidos').value.trim();
        const email     = document.getElementById('reg_email_p').value.trim();
        const password  = document.getElementById('reg_password_p').value;
        const profesion = document.getElementById('reg_profesion').value;
        const direccion = document.getElementById('reg_direccion_p').value;

        if (!nombre || !apellidos || !email || !password) {
            mostrarAlerta(formRegistro, 'Por favor completa todos los campos obligatorios.', 'danger');
            return;
        }

        try {
            const respuesta = await fetch(`${API_URL}/usuarios/registro`, {
          //  const respuesta = await fetch(`/usuarios/registro`, {
                method:  'POST',
                headers: { 'Content-Type': 'application/json' },
                body: JSON.stringify({
                    tipo_id:  1,
                    nombre:   `${nombre} ${apellidos}`,
                    email,
                    password,
                    profesion,
                    direccion
                })
            });

            const data = await respuesta.json();

            if (respuesta.ok) {
                mostrarAlerta(formRegistro, '¡Cuenta creada! Ya puedes iniciar sesión.', 'success');
                formRegistro.reset();
                setTimeout(() => {
                    bootstrap.Modal.getInstance(document.getElementById('registroModal')).hide();
                    new bootstrap.Modal(document.getElementById('loginModal')).show();
                }, 1500);
            } else {
                mostrarAlerta(formRegistro, data.messages?.error || 'Error al crear la cuenta.', 'danger');
            }

        } catch (error) {
            mostrarAlerta(formRegistro, 'No se pudo conectar con el servidor.', 'danger');
            console.error(error);
        }
    });


    // ==========================================================
    // REGISTRO EMPRESA
    // ==========================================================
    const formEmpresa = document.getElementById('formEmpresa');

    formEmpresa.addEventListener('submit', async (e) => {
        e.preventDefault();

        const nombre_empresa = document.getElementById('emp_nombre_empresa').value.trim();
        const email          = document.getElementById('emp_email').value.trim();
        const password       = document.getElementById('emp_password').value;
        const sitio_web      = document.getElementById('emp_sitio_web').value.trim();
        const ubicacion      = document.getElementById('emp_ubicacion').value;

        if (!nombre_empresa || !email || !password) {
            mostrarAlerta(formEmpresa, 'Nombre de empresa, correo y contraseña son obligatorios.', 'danger');
            return;
        }

        try {
          //  const respuesta = await fetch(`/usuarios/registro`, {
            const respuesta = await fetch(`${API_URL}/usuarios/registro`, {
                method:  'POST',
                headers: { 'Content-Type': 'application/json' },
                body: JSON.stringify({
                    tipo_id: 2,
                    nombre:  nombre_empresa,
                    email,
                    password,
                    nombre_empresa,
                    sitio_web,
                    ubicacion
                })
            });

            const data = await respuesta.json();

            if (respuesta.ok) {
                mostrarAlerta(formEmpresa, '¡Empresa registrada! Ya puedes iniciar sesión.', 'success');
                formEmpresa.reset();
                setTimeout(() => {
                    bootstrap.Modal.getInstance(document.getElementById('empresaModal')).hide();
                    new bootstrap.Modal(document.getElementById('loginModal')).show();
                }, 1500);
            } else {
                mostrarAlerta(formEmpresa, data.messages?.error || 'Error al registrar la empresa.', 'danger');
            }

        } catch (error) {
            mostrarAlerta(formEmpresa, 'No se pudo conectar con el servidor.', 'danger');
            console.error(error);
        }
    });


    // ==========================================================
    // LOGIN
    // ==========================================================
    const formLogin = document.getElementById('formLogin');

    formLogin.addEventListener('submit', async (e) => {
        e.preventDefault();

        const email    = formLogin.querySelector('input[type="email"]').value.trim();
        const password = formLogin.querySelector('input[type="password"]').value;

        if (!email || !password) {
            mostrarAlerta(formLogin, 'Ingresa tu correo y contraseña.', 'danger');
            return;
        }

        try {
            const respuesta = await fetch(`${API_URL}/usuarios/login`, {
                method:  'POST',
                headers: { 'Content-Type': 'application/json' },
                body: JSON.stringify({ email, password })
            });

            const data = await respuesta.json();

            if (respuesta.ok) {
                localStorage.setItem('usuario', JSON.stringify(data.usuario));
                mostrarAlerta(formLogin, `¡Bienvenido, ${data.usuario.nombre}!`, 'success');
                setTimeout(() => {
                    bootstrap.Modal.getInstance(document.getElementById('loginModal')).hide();
                    actualizarNavbar(data.usuario);
                }, 1000);
            } else {
                mostrarAlerta(formLogin, 'Correo o contraseña incorrectos.', 'danger');
            }

        } catch (error) {
            mostrarAlerta(formLogin, 'No se pudo conectar con el servidor.', 'danger');
            console.error(error);
        }
    });


    // ==========================================================
    // VERIFICAR SESIÓN AL CARGAR LA PÁGINA
    // ==========================================================
    const usuarioGuardado = localStorage.getItem('usuario');
    if (usuarioGuardado) {
        actualizarNavbar(JSON.parse(usuarioGuardado));
    }

});


// ==========================================================
// FUNCIONES DE APOYO
// ==========================================================

function mostrarAlerta(formulario, mensaje, tipo) {
    const alertaAnterior = formulario.querySelector('.alert');
    if (alertaAnterior) alertaAnterior.remove();

    const alerta = document.createElement('div');
    alerta.className   = `alert alert-${tipo} mt-3`;
    alerta.textContent = mensaje;
    formulario.appendChild(alerta);

    setTimeout(() => alerta.remove(), 4000);
}

function actualizarNavbar(usuario) {
    const btnLogin    = document.querySelector('[data-bs-target="#loginModal"]');
    const btnRegistro = document.querySelector('[data-bs-target="#registroModal"]');

    if (btnLogin && btnRegistro) {
        btnLogin.replaceWith(crearBotonUsuario(usuario));
        btnRegistro.remove();
    }
}

function crearBotonUsuario(usuario) {
    const contenedor = document.createElement('div');
    contenedor.className = 'd-flex align-items-center gap-2';

    // Ícono según tipo de usuario
    const icono = usuario.tipo === 'empresa' ? 'bi-building' : 'bi-person-circle';

    contenedor.innerHTML = `
        <span class="fw-bold text-primary">
            <i class="bi ${icono} me-1"></i>${usuario.nombre.split(' ')[0]}
        </span>
        <button class="btn btn-outline-danger btn-sm" id="btnCerrarSesion">
            Cerrar sesión
        </button>
    `;

    contenedor.querySelector('#btnCerrarSesion').addEventListener('click', () => {
        localStorage.removeItem('usuario');
        location.reload();
    });

    return contenedor;
}
