// Precios por artista y fila
const preciosPorArtista = {
    'The Driver Era': {
        1: 4500, // Filas 1-3
        4: 2600, // Filas 4-7
        8: 1300  // Filas 8-10
    },
    'The 1975': {
        1: 5000, // Filas 1-3
        4: 3100, // Filas 4-7
        8: 1600  // Filas 8-10
    },
    'Taylor Swift': {
        1: 7800, // Filas 1-3
        4: 3800, // Filas 4-7
        8: 2100  // Filas 8-10
    }
};

// Datos específicos del artista (se pasan como parámetros al inicializar)
let artista, dias;

// Configuración inicial
const filas = 10;
const columnas = 12;
let diaSeleccionado;
const asientosVendidos = {};
let asientosSeleccionados = {}; // Objeto: { "1A": 4500, "4B": 2600, ... }

// Función para inicializar la página
function inicializarPagina(nombreArtista, diasArtista) {
    artista = nombreArtista;
    dias = diasArtista;
    diaSeleccionado = dias[0]; // Seleccionar el primer día por defecto

    // Inicializar asientos vendidos para cada día
    dias.forEach(dia => asientosVendidos[dia] = new Set());

    // Verificar e insertar asientos si no existen
    verificarEInsertarAsientos();

    // Renderizar los días disponibles
    renderizarDias();
}

// Función para obtener el precio de un asiento según la fila
function obtenerPrecio(fila) {
    if (!artista || !preciosPorArtista[artista]) {
        console.error("Artista no definido o no tiene precios asignados.");
        return 0;
    }

    if (fila >= 1 && fila <= 3) {
        return preciosPorArtista[artista][1];
    } else if (fila >= 4 && fila <= 7) {
        return preciosPorArtista[artista][4];
    } else if (fila >= 8 && fila <= 10) {
        return preciosPorArtista[artista][8];
    } else {
        return 0; // En caso de fila no válida
    }
}

// Función para verificar e insertar asientos si no existen
function verificarEInsertarAsientos() {
    const url = 'verificar_e_insertar_asientos.php';
    const data = {
        artista: artista,
        dias: dias,
        filas: filas,
        columnas: columnas
    };

    fetch(url, {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json'
        },
        body: JSON.stringify(data)
    })
    .then(response => response.json())
    .then(result => {
        if (result.error) {
            console.error("Error al verificar/insertar asientos:", result.error);
        } else {
            console.log(result.message);
            cargarAsientos(); // Cargar los asientos después de insertarlos
        }
    })
    .catch(error => console.error('Error al verificar/insertar asientos:', error));
}

// Función para renderizar los días disponibles
function renderizarDias() {
    const contenedorDias = document.querySelector('.dias');
    contenedorDias.innerHTML = '';
    dias.forEach(dia => {
        const boton = document.createElement('button');
        boton.className = 'btn btn-primary';
        boton.textContent = dia;
        boton.onclick = () => seleccionarDia(dia);
        contenedorDias.appendChild(boton);
    });
}

// Función para seleccionar un día
function seleccionarDia(dia) {
    diaSeleccionado = dia;
    asientosSeleccionados = {}; // Reiniciar los asientos seleccionados
    document.querySelectorAll('.dias button').forEach(btn => btn.classList.remove('selected'));
    event.target.classList.add('selected');
    cargarAsientos();
}

// Función para cargar los asientos desde el servidor
function cargarAsientos() {
    const url = `consultar_asientos.php?artista=${encodeURIComponent(artista)}&dia=${diaSeleccionado}`;

    fetch(url)
        .then(response => response.json())
        .then(data => {
            if (data.error) {
                console.error("Error al cargar los asientos:", data.error);
                return;
            }

            asientosVendidos[diaSeleccionado].clear();

            data.asientos.forEach(asiento => {
                if (asiento.estado === 'vendido') {
                    asientosVendidos[diaSeleccionado].add(asiento.asiento);
                }
            });

            renderizarAsientos();
        })
        .catch(error => console.error('Error al cargar los asientos:', error));
}

// Función para seleccionar/deseleccionar un asiento
function toggleAsiento(asiento, precio) {
    if (asientosVendidos[diaSeleccionado].has(asiento)) return;

    if (asientosSeleccionados[asiento]) {
        // Si el asiento ya está seleccionado, eliminarlo
        delete asientosSeleccionados[asiento];
    } else {
        // Si el asiento no está seleccionado, agregarlo
        asientosSeleccionados[asiento] = precio;
        console.log(`Asiento seleccionado: ${asiento}, Precio: $${precio}`); // Verificar en la consola
    }

    renderizarAsientos();
}

// Función para renderizar los asientos
function renderizarAsientos() {
    const contenedor = document.getElementById('asientos');
    contenedor.innerHTML = '';
    for (let i = 0; i < filas * columnas; i++) {
        const fila = Math.floor(i / columnas) + 1;
        const columna = String.fromCharCode(65 + (i % columnas)); // A, B, C, ..., L
        const asiento = `${fila}${columna}`;
        const precio = obtenerPrecio(fila);

        const boton = document.createElement('button');
        boton.className = 'asiento';
        if (asientosVendidos[diaSeleccionado].has(asiento)) {
            boton.classList.add('vendido');
        } else if (asientosSeleccionados[asiento]) {
            boton.style.backgroundColor = 'orange';
        }
        boton.textContent = `${asiento} - $${precio}`;
        boton.onclick = () => toggleAsiento(asiento, precio);
        contenedor.appendChild(boton);
    }
}

// Función para vender los asientos seleccionados
function venderAsientos() {
    const asientos = Object.keys(asientosSeleccionados);
    if (asientos.length === 0) {
        alert("Selecciona al menos un asiento para vender.");
        return;
    }

    let precioTotal = 0;
    const asientosSeleccionadosArray = [];

    // Calcular el precio total y obtener los asientos seleccionados
    asientos.forEach(asiento => {
        const precio = asientosSeleccionados[asiento];
        if (typeof precio === 'number') { // Verificar que el precio es un número
            precioTotal += precio;
            asientosSeleccionadosArray.push(`${asiento} - $${precio}`);
        } else {
            console.error(`Precio no válido para el asiento ${asiento}:`, precio);
        }
    });

    console.log(`Precio total calculado: $${precioTotal}`); // Verificar en la consola

    const fechaHora = new Date().toLocaleString();

    // Llenar los datos del modal
    document.getElementById('modalArtista').textContent = artista;
    document.getElementById('modalDia').textContent = diaSeleccionado;
    document.getElementById('modalAsientos').textContent = asientosSeleccionadosArray.join(', ');
    document.getElementById('modalPrecioTotal').textContent = `$${precioTotal}`;
    document.getElementById('modalFechaHora').textContent = fechaHora;

    // Mostrar el modal
    document.getElementById('comprobanteModal').style.display = 'block';
}

// Función para confirmar la venta
function confirmarVenta() {
    const url = 'vender_asientos.php';
    const data = {
        artista: artista,
        dia: diaSeleccionado,
        asientos: Object.keys(asientosSeleccionados) // Enviar solo los asientos
    };

    fetch(url, {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json'
        },
        body: JSON.stringify(data)
    })
    .then(response => response.json())
    .then(result => {
        if (result.error) {
            console.error("Error al vender los asientos:", result.error);
            alert("Error al vender los asientos: " + result.error);
        } else {
            console.log("Venta realizada:", result.message);
            alert(result.message);

            // Marcar los asientos como vendidos en la interfaz
            Object.keys(asientosSeleccionados).forEach(asiento => {
                asientosVendidos[diaSeleccionado].add(asiento);
            });
            asientosSeleccionados = {}; // Reiniciar los asientos seleccionados
            renderizarAsientos();
        }
    })
    .catch(error => console.error('Error al vender los asientos:', error));

    // Cerrar el modal
    document.getElementById('comprobanteModal').style.display = 'none';
}

// Función para rechazar la venta
function rechazarVenta() {
    // Deseleccionar los asientos
    asientosSeleccionados = {};
    renderizarAsientos();

    // Mostrar mensaje de compra cancelada
    alert("Compra cancelada");

    // Cerrar el modal
    document.getElementById('comprobanteModal').style.display = 'none';
}

// Manejar el cierre del modal
const modal = document.getElementById('comprobanteModal');
const span = document.getElementsByClassName('close')[0];

span.onclick = () => modal.style.display = 'none';
window.onclick = (event) => {
    if (event.target === modal) {
        modal.style.display = 'none';
    }
};