import {alert, prompt, confirm} from "./popups.js";
const socket = io();
const dish = document.querySelector("#dish ul");
const ingredient = document.querySelector("#ingredient ul");
const sauce = document.querySelector("#sauce ul");
const drink = document.querySelector("#drink ul");
const dessert = document.querySelector("#dessert ul");
const list = document.querySelector(".list");
let current = {dish: null, ingredient: [], sauce: [], drink: null, dessert: null};
let radios = {dish: null, drink: null, dessert: null};
let db = {dish: {}, ingredient: {}, sauce: {}, drink: {}, dessert: {}};
function addCmd(command) {
list.insertAdjacentHTML("beforeend", `
${command.number}
${command.sandwich}
${command.client}
${command.dish}
${command.ingredients}
${command.sauces}
${command.drink}
${command.dessert}
`);
let e = document.querySelector(`.list #cmd${command.number}`);
e.addEventListener( "click" ,ev => {
ev.stopPropagation();
e.classList.toggle("show-spec");
});
e.querySelector(".give").addEventListener("click", ev => {
ev.stopPropagation();
socket.emit("give command", command.number);
});
e.querySelector(".cancel").addEventListener("click", ev => {
ev.stopPropagation();
socket.emit("clear command", command.number);
});
e.querySelector(".error").addEventListener("click", ev => {
ev.stopPropagation();
socket.emit("error command", command.number);
});
if (command.error)
error(e)
else if (command.give)
give(e)
else if (command.done)
done(e)
else if (command.WIP)
WIP(e, command.sandwich)
document.querySelector("#resume>h1").innerHTML = `Command ${command.number+1}`;
}
function addDish(d) {
db.dish[d.id] = d;
dish.insertAdjacentHTML("beforeend", ``);
let e = document.querySelector(`input[id=dish${d.id}]`);
e.addEventListener("click", () => {
radioCheck(e);
document.querySelectorAll("input[name=ingredient],input[name=sauce]").forEach( el => {
if (el.checked)
el.click();
});
document.querySelectorAll("input[name=ingredient],input[name=sauce]").forEach( el => {
el.disabled = !(e.checked && !(db.dish[e.id.replace(e.name, "")]["max" + el.name.charAt(0).toUpperCase() + el.name.slice(1)+"s"] === 0));
});
})
}
function addIngredient(i) {
db.ingredient[i.id] = i;
ingredient.insertAdjacentHTML("beforeend", ``);
let e = document.querySelector(`input[id=ingredient${i.id}]`);
e.addEventListener("click", () => {
checkCheck(e)
})
}
function addSauce(s) {
db.sauce[s.id] = s;
sauce.insertAdjacentHTML("beforeend", ``);
let e = document.querySelector(`input[id=sauce${s.id}]`);
e.addEventListener("click", () => {
checkCheck(e)
})
}
function addDrink(d) {
db.drink[d.id] = d;
drink.insertAdjacentHTML("beforeend", ``);
let e = document.querySelector(`input[id=drink${d.id}]`);
e.addEventListener("click", () => {
radioCheck(e)
})
}
function addDessert(d) {
db.dessert[d.id] = d;
dessert.insertAdjacentHTML("beforeend", ``);
let e = document.querySelector(`input[id=dessert${d.id}]`);
e.addEventListener("click", () => {
radioCheck(e)
})
}
function removeDish(d) {
dish.querySelector("#dish"+d).parentElement.remove();
delete db.dish[d];
}
function removeIngredient(d) {
ingredient.querySelector("#ingredient"+d).parentElement.remove();
delete db.ingredient[d];
}
function removeSauce(d) {
sauce.querySelector("#sauce"+d).parentElement.remove();
delete db.sauce[d];
}
function removeDrink(d) {
drink.querySelector("#drink"+d).parentElement.remove();
delete db.drink[d];
}
function removeDessert(d) {
dessert.querySelector("#dessert"+d).parentElement.remove();
delete db.dessert[d];
}
function radioCheck (e) {
if (e.checked) {
let curr, name;
if (e.id.replace(e.name, "") === radios[e.name]) {
e.checked = false;
radios[e.name] = null;
curr = null;
name = null;
} else {
radios[e.name] = e.id.replace(e.name, "");
curr = e.id.replace(e.name, "");
name = document.querySelector(`label[for=${e.id}]`).innerHTML;
}
current[e.name] = curr;
price();
document.getElementById("p-"+e.name).innerHTML = name;
}
}
function checkCheck(e) {
if (e.checked)
current[e.name].push(e.id.replace(e.name, ""));
else
current[e.name].splice(current[e.name].indexOf(e.id.replace(e.name, "")), 1);
document.querySelectorAll(`input[name=${e.name}]`).forEach( e => {
if (!e.checked)
e.disabled = current[e.name].length === db.dish[current.dish]["max"+e.name.charAt(0).toUpperCase() + e.name.slice(1)+"s"];
});
price();
let names = [];
current[e.name].forEach(el=>names.push(document.querySelector(`label[for=${e.name}${el}]`).innerHTML));
document.getElementById("p-"+e.name).innerHTML = names.join(" - ");
}
function clear(e) {
e.classList.remove("done");
e.classList.remove("give");
e.classList.remove("warning");
e.classList.remove("WIP");
e.classList.remove("show-spec");
list.prepend(e);
}
function WIP(e, name) {
e.classList.remove("show-spec");
e.classList.add("WIP");
e.querySelector("h2").innerHTML = name;
}
function done(e) {
e.classList.remove("show-spec");
e.classList.add("done");
}
function give(e) {
e.classList.remove("show-spec");
e.classList.add("give");
list.appendChild(e);
}
function error(e) {
e.classList.remove("show-spec");
e.classList.add("warning");
list.appendChild(e);
}
function price() {
socket.emit("price", current);
}
async function addUser() {
let firstName, lastName;
do {
firstName = await prompt("First name");
} while (firstName === "");
if (firstName) {
do {
lastName = await prompt("Last name");
} while (lastName === "");
if (lastName)
socket.emit("add user", {username: current.client, firstName: firstName, lastName: lastName});
}
if (!firstName|| !lastName) {
await alert("User creation aborted");
}
}
function addCommand() {
current.pc = null;
socket.emit("add command", current);
clearSelections();
}
function clearSelections() {
current = {dish: null, ingredient: [], sauce: [], drink: null, dessert: null, price: {}};
document.querySelectorAll("input[name=dish],input[name=drink],input[name=dessert]").forEach( e => {
e.checked = false;
});
document.querySelectorAll("input[name=ingredient],input[name=sauce]").forEach( e => {
e.checked = false;
e.disabled = true;
});
document.querySelectorAll("#resume p").forEach( e => {
e.innerHTML = ""
});
let user = document.getElementById("user");
user.value = "";
user.style.color = "";
document.getElementById("user_list").innerHTML = "";
document.querySelector("#resume h2").innerHTML = "0€";
}
socket.on("connected", () => {
socket.emit("list dish");
socket.emit("list ingredient");
socket.emit("list sauce");
socket.emit("list drink");
socket.emit("list dessert");
socket.emit("list command");
});
socket.on("list command", data => {
let child = list.lastElementChild;
while (child) {
list.removeChild(child);
child = list.lastElementChild;
}
for (let c of data)
addCmd(c);
});
socket.on("list dish", data => {
let child = dish.lastElementChild;
while (child) {
dish.removeChild(child);
child = dish.lastElementChild;
}
for (let d of data)
if (d.available)
addDish(d);
});
socket.on("list ingredient", data => {
let child = ingredient.lastElementChild;
while (child) {
ingredient.removeChild(child);
child = ingredient.lastElementChild;
}
for (let i of data)
if (i.available)
addIngredient(i);
});
socket.on("list sauce", data => {
let child = sauce.lastElementChild;
while (child) {
sauce.removeChild(child);
child = sauce.lastElementChild;
}
for (let s of data)
if (s.available)
addSauce(s);
});
socket.on("list drink", data => {
let child = drink.lastElementChild;
while (child) {
drink.removeChild(child);
child = drink.lastElementChild;
}
for (let d of data)
if (d.available)
addDrink(d);
});
socket.on("list dessert", data => {
let child = dessert.lastElementChild;
while (child) {
dessert.removeChild(child);
child = dessert.lastElementChild;
}
for (let d of data)
if (d.available)
addDessert(d);
});
socket.on("list user", data => {
let user_list = document.getElementById("user_list");
user_list.innerHTML = "";
for (let u of data)
user_list.insertAdjacentHTML("beforeend", `