document.addEventListener("DOMContentLoaded", async function () { 
    const loggedin = $.storage('loggedIn').get();   
    const hasCompany = $.storage("setCompanyPrincipal").get();
    let empresas = [];
    let usuarios = [];

    if (!hasCompany && loggedin) {
        document.title = $.storage("nameCompanyPrincipal").get();
    } else {
        document.title = "TraceStock Configuration";
    }

    // 🔹 Verificação empresa principal
    $.AjaxRequest({
        url: "./php/data.php",
        data: { id: "temEmpresaPrincipal" },
        success: function(response) {
            if (parseInt(response.data.id) > 0 ) {
                $.storage('setCompanyPrincipal').remove();
                $.storage('nameCompanyPrincipal').set(response.data.nome);
            } else {
                $.storage('setCompanyPrincipal').set(true);
            }
        }
    });

    // 🔹 Botão wizard
    const btnWizard = await $.await("#wizzardButton");
    btnWizard.get()[0].addEventListener("click", function () {            
        let NavegacaoContainer = new Containers("navegacao");
        NavegacaoContainer.CreateWizzard();
    });

    // 🔹 Wizard Modal
    const wizardModal = await $.await("#wizardModal");
    let currentStep = 1;
    const totalSteps = 6;

    // Espera pelo botão "Next"
    const btnNext = await $.await("#btn-next");
    btnNext.get()[0].addEventListener("click", () => {
        if (currentStep < totalSteps) {
            currentStep++;
            showStep(currentStep);
        }
    });

    // Espera pelo botão "Prev"
    const btnPrev = await $.await("#btn-prev");
    btnPrev.get()[0].addEventListener("click", () => {
        if (currentStep > 1) {
            currentStep--;
            showStep(currentStep);
        }
    });

    // Botões negar
    $("#btn-denied-empresa").elements[0].addEventListener("click", () => {
        const novaEmpresaModal = bootstrap.Modal.getInstance($("#novaEmpresaModal").elements[0]);
        novaEmpresaModal.hide();

        $("#novaEmpresaModal").elements[0].addEventListener("hidden.bs.modal", () => {
            new bootstrap.Modal($("#wizardModal").elements[0]).show();
        }, { once: true });
    });

    $("#btn-denied-user").elements[0].addEventListener("click", () => {
        const novoUsuarioModal = bootstrap.Modal.getInstance($("#novoUsuarioModal").elements[0]);
        novoUsuarioModal.hide();

        $("#novoUsuarioModal").elements[0].addEventListener("hidden.bs.modal", () => {
            new bootstrap.Modal($("#wizardModal").elements[0]).show();
        }, { once: true });
    });


    // Criar nova empresa (limpa inputs)
    $("#CreateNewCompanyForm").on("click", () => {
        [
            "empresa-nome","empresa-razao","empresa-nif","empresa-email",
            "empresa-telefone","empresa-website","empresa-rua","empresa-numero",
            "empresa-complemento","empresa-bairro","empresa-cidade","empresa-estado","empresa-cep"
        ].forEach(id => $(`#${id}`).val(""));
    });

    // Criar novo usuário (popular select empresas)
    $("#CreateNewUserForm").on("click", () => {
        $.await("#empresa-user").then(selectEl => {
            const select = selectEl.get()[0];
            select.innerHTML = "";
            empresas.forEach(e => {
                let opt = document.createElement("option");
                opt.value = e.id;
                opt.textContent = e.nome;
                select.appendChild(opt);
            });
        });
    });

    // Adicionar empresa
    $("#btn-add-empresa").on("click", () => {
        const empresa = {
            nome: $("#empresa-nome").val() || "",
            razao: $("#empresa-razao").val() || "",
            nif: $("#empresa-nif").val() || "",
            email: $("#empresa-email").val() || "",
            telefone: $("#empresa-telefone").val() || "",
            website: $("#empresa-website").val() || "",
            rua: $("#empresa-rua").val() || "",
            numero: $("#empresa-numero").val() || "",
            complemento: $("#empresa-complemento").val() || "",
            bairro: $("#empresa-bairro").val() || "",
            cidade: $("#empresa-cidade").val() || "",
            estado: $("#empresa-estado").val() || "",
            cep: $("#empresa-cep").val() || "",
            pais: $("#empresa-pais").val() || "",
            status: $("#empresa-status").val() || "",
        };

        empresa.tipo = document.getElementById("tipo-empresa-principal").selectedOptions[0]?.dataset.id || "",
        console.log(empresa);

        $.AjaxRequest({
            url: "./php/data.php",
            data: { id: "configurationEmpresa", empresas: JSON.stringify(empresa) },
            success: function(response) {
                console.log(response);
                empresa.id = response.empresa_id.id;
                empresas.push(empresa);
                atualizarListaEmpresas();

                bootstrap.Modal.getInstance(document.getElementById("novaEmpresaModal")).hide();
                new bootstrap.Modal(document.getElementById("wizardModal")).show();
            },
            error: function(err) {
                new Containers("main").Notify(`Erro ao inserir empresa: ${err}`, "error", 3000);
            }
        });
    });

    // Adicionar usuário
    $("#btn-add-user").on("click", () => {
        const usuario = {
            nome: $("#user-firstname").val(),
            apelido: $("#user-lastname").val(),
            telefone: $("#user-phone").val(),
            email: $("#user-email").val(),
            password: $("#user-pass").val(),
            permission: $("#user-permission").val(),
            empresa: $("#empresa-user").val(),
            active: "ATIVA"
        };

        $.AjaxRequest({
            url: "./php/data.php",
            data: { id: "configurationUsers", usuarios: JSON.stringify(usuario) },
            success: function(response) {
                if ($("#user-pass").val() === $("#user-repass").val()) {
                    if (response.success) {
                        usuario.id = response.user_id;
                        usuarios.push(usuario);
                        atualizarListaUsuarios();

                        bootstrap.Modal.getInstance($("#novoUsuarioModal").get()[0]).hide();
                        new bootstrap.Modal(wizardModal.get()[0]).show();
                        new Containers("main").Notify("Usuário criado com sucesso!", "success", 4000);
                    }
                } else {
                    new Containers("main").Notify("As passwords estão erradas!", "error", 4000);
                }
            },
            error: function(err) {
                new Containers("main").Notify(`Erro AJAX: ${err}`, "error", 3000);
            }
        });
    });

    document.getElementById("refreshUsuario").addEventListener("click", function(){
        usuarios = [];
        $.AjaxRequest({
            url: "./php/data.php", 
            data: { id: "getUsuarios" }, 
            success: function(response) {
                if (response.data.length > 0) {
                    response.data.forEach(d => {
                        usuarios.push({
                            id: d.id, empresa: d.id_empresa, nome: d.nome,
                            apelido: d.apelido, email: d.email_contato, telefone: d.telefone,
                            active: (toBoolean(d.active) == true ? "ATIVA" : "NÃO ACTIVA")
                        });
                    });
                    atualizarListaUsuarios();
                };
            },
            error: function(err) {
                new Containers("main").Notify(`Erro ao inserir usuário: ${err}`, "error", 3000);
            }
        });
    });

    
    document.getElementById("refreshEmpresa").addEventListener("click", function(){
        empresas = [];
        $.AjaxRequest({
            url: "./php/data.php",
            data: { id: "getEmpresas" },
            success: function(response) {
                response.data.forEach(d => {
                    empresas.push({
                        id: d.id, nome: d.nome, razao: d.razao_social, nif: d.nif_cnpj,
                        email: d.email_contato, telefone: d.telefone, website: d.website,
                        rua: d.endereco_rua, numero: d.endereco_numero, complemento: d.endereco_complemento,
                        bairro: d.endereco_bairro, cidade: d.endereco_cidade, estado: d.endereco_estado,
                        cep: d.endereco_cep, pais: d.endereco_pais,
                        status: (d.active == 1 ? "ATIVA" : "NÃO ACTIVA")
                    });
                });
                atualizarListaEmpresas();
            },
            error: function(err) {
                new Containers("main").Notify(`Erro ao inserir empresa: ${err}`, "error", 3000);
            }
        });
    });

    // Funções atualizar listas
    function atualizarListaEmpresas() {
        const lista = $("#lista-empresas").get();
        if (empresas.length === 0) {
            lista.append("<p>Nenhuma empresa criada.</p>");
            return;
        }

        let html = '<ul class="list-group">';
        empresas.forEach((e, i) => {
            html += `
                <li class="list-group-item bg-dark text-white d-flex justify-content-between align-items-center">
                    <span>
                        <strong>${e.nome}</strong> (${e.nif}) - ${e.cidade}, ${e.estado}</strong>
                    </span>
                    <div class="d-flex align-items-center gap-2">
                        <span class="badge bg-success">${e.status}</span>
                        <button class="btn btn-sm btn-danger btn-remove" data-nif="${e.nif}" data-index="${i}">Remover</button>
                    </div>
                </li>`;
        });
        html += '</ul>';
        lista.innerHTML = html;

        $(".btn-remove").on("click", function() {
            const index = this.dataset.index;
            const nifEmpresa = this.dataset.nif;
            $.AjaxRequest({
                url: "./php/data.php",
                data: { id: "removeEmpresa", nif: nifEmpresa },
                success: function(response) {
                    if (response.success) {
                        empresas.splice(index, 1);
                        atualizarListaEmpresas();
                    }
                },
                error: function(err) {
                    new Containers("main").Notify(`Erro AJAX: ${err}`, "error", 3000);
                }
            });
        });
    }

    function atualizarListaUsuarios() {
        const lista = $("#lista-usuarios").get();
        if (usuarios.length === 0) {
            lista.append("<p>Nenhum usuário criado.</p>");
            return;
        }

        let html = '<ul class="list-group">';
        usuarios.forEach((e, i) => {
            html += `
                <li class="list-group-item bg-dark text-white d-flex justify-content-between align-items-center">
                    <span><strong>${e.nome} ${e.apelido} (id: ${e.id})</strong></span>
                    <div class="d-flex align-items-center gap-2">
                        <span class="badge bg-success">${e.active}</span>
                        <button class="btn btn-sm btn-danger btn-remove-user" data-index="${i}">Remover</button>
                    </div>
                </li>`;
        });
        html += '</ul>';
        lista.innerHTML = html;

        $(".btn-remove-user").on("click", function() {
            const index = this.dataset.index;
            $.AjaxRequest({
                url: "./php/data.php",
                data: { id: "removeUser", user_id: usuarios[index].id },
                success: function(response) {
                    if (response.success) {                                
                        new Containers("main").Notify(`Removido com sucesso`, "success", 3000);
                    }
                }
            });
            usuarios.splice(index, 1);
            atualizarListaUsuarios();
        });
    }
    
    function showStep(step) { 
        document.querySelectorAll("#wizard-content .step").forEach(s => s.classList.add("d-none")); 
        document.querySelector(`#wizard-content .step-${step}`).classList.remove("d-none"); 
        if (step < 4) { document.querySelector("#wizard-footer .step-4").classList.add("d-none"); 
            document.querySelector("#wizard-footer .step-5").classList.add("d-none"); 
        } 
        if (step === 4) { 
            document.querySelector("#wizard-footer .step-4").classList.remove("d-none"); 
            document.querySelector("#wizard-footer .step-5").classList.add("d-none"); 
        } 
        if (step === 5) { 
            document.querySelector("#wizard-footer .step-4").classList.add("d-none");
            document.querySelector("#wizard-footer .step-5").classList.remove("d-none"); 
        } 
        document.querySelectorAll("#wizard-steps .nav-link").forEach(l => l.classList.remove("active")); 
        document.querySelector(`#wizard-steps .nav-link[data-step='${step}']`).classList.add("active"); 
        document.getElementById("btn-prev").disabled = (step === 1); 
        if (step === totalSteps) { 
            document.querySelector("#wizard-footer .step-4").classList.add("d-none"); 
            document.querySelector("#wizard-footer .step-5").classList.add("d-none"); 
            document.getElementById("btn-next").classList.add("d-none"); 
            document.getElementById("btn-finish").classList.remove("d-none"); 
            document.getElementById("btn-finish").onclick = function () { 
                let language = document.getElementById("idioma-system-configuration").value; 
                let company = { 
                    id: 1, nome: document.getElementById("empresa-nome-principal").value, 
                    nif: document.getElementById("nif-empresa-principal").value, 
                    email: document.getElementById("email-empresa-principal").value, 
                    contato: document.getElementById("telefone-empresa-principal").value, 
                    tipo: document.getElementById("tipo-empresa-principal").value, 
                    endereco: { 
                        rua: document.getElementById("empresa-principal-endereco").value, 
                        numero: document.getElementById("empresa-principal-numero").value, 
                        localidade: document.getElementById("empresa-principal-localidade").value,
                        endereco: document.getElementById("empresa-principal-endereco").value, 
                        concelho: document.getElementById("empresa-principal-concelho").value, 
                        distrito: document.getElementById("empresa-principal-distrito").value, 
                        codPostal: `${document.getElementById("empresa-principal-first-code").value}-${document.getElementById("empresa-principal-second-code").value}`, 
                        pais: document.getElementById("empresa-pais-principal").value 
                    } 
                } 
                ajaxRequest("./php/data.php", { id: "configurationCompany", "company": JSON.stringify(company), "language": language }, function(response) { 
                    if (response.success) { 
                        localStorage.setItem("notifyMessage", "Configuração completa com sucesso!"); 
                        localStorage.setItem("notifyType", "success"); window.location.href = 'index.html'; 
                    } 
                }); 
            }; 
        } else { 
            document.getElementById("btn-next").classList.remove("d-none"); 
            document.getElementById("btn-finish").classList.add("d-none"); 
        } 
    }
});
