const mariadb = require('./_db');



async function getUsers(){
    try {
        let conn = await mariadb.getConn();

        const rows = await conn.query("SELECT * FROM user");

        conn.release();

        return rows; 
    }
    catch(err){
        console.log("No se pudo acceder a la BD: "+err);
    }
}

module.exports.getUsers = getUsers;

async function userLogin(username, password){
    try {
        let conn = await mariadb.getConn();

        const rows = await conn.query("SELECT userID, discotecaID, userType, username FROM user WHERE username = ? AND password = ?", [username, password]);
        conn.release();

        if (rows){
        return rows;}
    }
    catch(err){
        console.log("No se pudo acceder a la BD: "+err);
    }
}

module.exports.userLogin = userLogin;

async function getDiscoteca(discotecaId){
   try{
    let conn = await mariadb.getConn();
    const rows = await conn.query("SELECT discotecaID, nombre, telefono, localizacion FROM discoteca WHERE discotecaID = ?", [discotecaId]);
    conn.release();

    if (rows){
        return rows;}
    
    }catch(err){
        console.log("No se pudo acceder a la BD: "+err);
    }

}

module.exports.getDiscoteca = getDiscoteca;

async function addEvento(evento){
    try{
        let conn = await mariadb.getConn();
        var rows = await conn.query ("SELECT * FROM evento WHERE id = ?", [evento.id]);
        conn.release();
        if (!rows){
            rows = await conn.query
            ("INSERT INTO evento (discotecaID, nombre, localizacion, fecha, hora, descripcion, precio1, precio2) VALUES (?, ?, ?, ?, ?, ?, ?, ?)",
            [evento.discotecaID, evento.nombre, evento.localizacion, evento.fecha, evento.hora, evento.descripcion, evento.precio1, evento.precio2]);
            conn.release();}
        
        else{
            rows = await conn.query
            ("UPDATE evento SET discotecaID = ?, nombre = ?, localizacion = ?, fecha = ?, hora = ?, descripcion = ?, precio1 = ?, precio2 = ? WHERE id = ?", 
            [evento.discotecaID, evento.nombre, evento.localizacion, evento.fecha, evento.hora, evento.descripcion, evento.precio1, evento.precio2, evento.id]);
        }

        if (rows){
            return rows;}
        
        }catch(err){
            console.log("No se pudo acceder a la BD: "+err);
        }
    
}

module.exports.addEvento = addEvento;

async function getEventos(){
    try{
    let conn = await mariadb.getConn();
    const rows = await conn.query("SELECT id, discotecaID, nombre, localizacion, fecha, hora, descripcion, precio1, precio2 FROM evento");
    conn.release();

    if(rows){
        return rows;}
    }catch(err){
        console.log("No se pudo acceder a la BD: "+err);
    }
}

module.exports.getEventos = getEventos;

async function getEventosDiscoteca(discotecaId){
    try{
        let conn = await mariadb.getConn();
        const rows = await conn.query("SELECT id, discotecaID, nombre, localizacion, fecha, hora, descripcion, precio1, precio2 FROM evento WHERE discotecaID = ?", [discotecaId.id]);
        conn.release();
    
        if (rows){
            return rows;}
        
        }catch(err){
            console.log("No se pudo acceder a la BD: "+err);
        }
}

module.exports.getEventosDiscoteca = getEventosDiscoteca;



async function addReserva(reserva){
    try{
        let conn = await mariadb.getConn();
        var rows = await conn.query("SELECT * FROM reserva WHERE UserID = ? AND EventoID = ?", [reserva.UserID, reserva.EventoID]);
        if(!rows[0]){ //primero inserta en la tabla codigo, y luego en la tabla reserva
            const CodigoUnico = await conn.query("INSERT INTO codigo (UserID, codigo, numReservas) VALUES (?, ?, ?)", 
            [reserva.UserID, reserva.codigoUnico, 0]);
            const codigoID = await conn.query("SELECT id FROM codigo WHERE codigo = ?", [reserva.codigoUnico]);
            reserva.codigoUnicoID = codigoID[0].id;
            if(reserva.descuentoPorciento){ //arreglar este if
                rows = await conn.query("INSERT INTO reserva (UserID, EventoID, codigoUnicoID, codigoDescuento, descuentoPorciento) VALUES (?, ?, ?, ?, ?)", 
                [reserva.UserID, reserva.EventoID, reserva.codigoUnicoID, reserva.codigoDescuento, reserva.descuentoPorciento]);}
            else{
                rows = await conn.query("INSERT INTO reserva (UserID, EventoID, codigoUnicoID, codigoDescuento) VALUES (?, ?, ?, ?)", 
                [reserva.UserID, reserva.EventoID, reserva.codigoUnicoID, reserva.codigoDescuento]);}
            return reserva;
            }
        else{
            console.log("Ya hay una reserva para este evento.");
        }
    }catch(err){
        console.log("No se pudo acceder a la BD: "+err);}
}



module.exports.addReserva = addReserva;

async function comprobarDescuento(reserva){
    try{
            let conn = await mariadb.getConn();
            const evento = await conn.query("SELECT * FROM evento WHERE id = ?", [reserva.EventoID]);
            console.log("Evento: "+evento);
            const tipoDescuento = evento[0].tipoDescuento;
            if(tipoDescuento){
                console.log("Tipo descuento: "+tipoDescuento);
                const porciento = await conn.query("SELECT porciento FROM descuentos WHERE id = ?", [tipoDescuento]);
                console.log("Porciento"+porciento);
                return porciento[0].porciento;
            }
        else return 0;
    }catch(err){
        console.log("No se pudo acceder a la BD: "+err);
    }
   
    
}

module.exports.comprobarDescuento = comprobarDescuento;

async function activarCodigo(reserva){
    try{
        let conn = await mariadb.getConn();
        const codigo = await conn.query("SELECT id FROM codigo WHERE codigo = ?", [reserva.codigoDescuento]);
        if (codigo.length>0){
            console.log("Codigo válido");
            await conn.query("UPDATE codigo SET numReservas = numReservas + 1 WHERE codigo = ?", [reserva.codigoDescuento]);
            return codigo;
        }
        else{
            console.log("Código inválido");
            return null;
        }
    }catch(err){
        console.log("No se pudo acceder a la BD: "+err);
    }
}

module.exports.activarCodigo = activarCodigo;
