const Auth = require("../models/auth");
const Table = require("../models/table");
const TableStatus = require("../models/tablestatus");
const TableTypes = require("../models/tabletypes");
const User = require("../models/user");

const tableModel = new Table();
const tableTypesModel = new TableTypes();
const tableStatusModel = new TableStatus();
const userModel = new User();


const showIndex = async(req, res, next) => {
    const { query } = req.query;
    const authResult = await Auth.getSessionData(req.session.token); 
    var tableResult;
    if(!query) {
        tableResult = await tableModel.findAllJoinTypesUsers() || [ ];
    }
    else tableResult = await tableModel.searchJoinTypes(query) || [ ];
    
    const tableStatusResult = await tableStatusModel.findAll() || [ ];

    res.render("restaurant/table/index",{ role: authResult.role,tableResult: tableResult,tableStatusData: tableStatusResult });
};

const showCreate = async(req, res, next) => {
    const authResult = await Auth.getSessionData(req.session.token); 
    const tableTypesResult = await tableTypesModel.findAll() || [ ];
    const tableStatusResult = await tableStatusModel.findAll() || [ ];

    res.render("restaurant/table/create",{ role: authResult.role,tableTypeData: tableTypesResult,tableStatusData: tableStatusResult });
};

const showManage = async(req, res, next) => {
    const { id } = req.params;
    const authResult = await Auth.getSessionData(req.session.token); 
    const tableResult = await tableModel.findOneJoinTypesUsersByID(id) || [ ];
    if(tableResult == null) return res.status(404).send("Not Found.");
    const tableTypesResult = await tableTypesModel.findAll() || [ ];
    const tableStatusResult = await tableStatusModel.findAll() || [ ];
    const usersResult = await userModel.findAll() || [ ];

    console.log(tableResult);

    res.render("restaurant/table/manage",{ role: authResult.role,tableData: tableResult,tableTypeData: tableTypesResult,tableStatusData: tableStatusResult,usersData: usersResult });
};

const updateTable = async(req, res, next) => {
    const { id,table_number,table_type,table_status,user_id } = req.body;
    console.log(id);
    const tableResult = await tableModel.findOneBy('id',id);
    if(tableResult == null) return res.status(404).send("Not Found.");

    await tableModel.updateBy('id',id,{ table_number, table_type, table_status,user_id: user_id == 0 ? null : user_id });

    res.redirect("/table/manage/" + id);
};

const deleteTable = async(req, res, next) => {
    const { id } = req.body;
    const tableResult = await tableModel.findOneBy('id',id);
    if(tableResult == null) return res.status(404).send("Not Found.");

    await tableModel.deleteById(id);

    res.redirect("/table");
};

const createTable = async(req, res, next) => {
    const { table_number,table_type } = req.body;

    const result = await tableModel.create({ table_number,table_type });

    res.redirect("/table");
};

module.exports = {
    showIndex,
    showManage,
    showCreate,
    updateTable,
    deleteTable,
    createTable,
};