| import BuscaApi from '../lib/BuscaApiG.js';
export default class GerenciadorUsuarios {
    constructor() {
        this.buscaApi = new BuscaApi(sessionStorage.getItem('token'));
        this.usuario_perfil=null;
    }
    async init() {
        await this.buscaUsers();
        await this.populatePerfis();
    }
    async inativeUsuario(email,chk) {
        return await this.buscaApi.fetchApi(`Usuarios`, 'PUT', { email,chk });
    }
    async perfilUsuario(email,perf) {
        return await this.buscaApi.fetchApi(`Usuarios/perfil`, 'PUT', { email,perf });
    }
    async deleteUsuario(email) {
        return await this.buscaApi.fetchApi(`Usuarios`, 'DELETE', { email });
    }
    async buscaUsers() {
        try {
            const data = await this.buscaApi.fetchApi(`Usuarios`, 'GET');
            this.renderUsers(data.Usuarios);
        } catch (error) {
            console.error(error);
            
        }
    }
    
    renderUsers(usuarios) {
        const divUser = document.querySelector('.main');
        usuarios.forEach(usuario => {
            this.usuario_perfil= usuario.perfilid;
            const container = document.createElement("div");
            container.classList.add("w3-card-4");
            container.innerHTML = `
                <div class="w3-container">
                    <h3>Dados no banco</h3>
                    <p>Id: ${usuario.id}</p>
                    <h3>Nome: ${usuario.nome}</h3>
                    <p id="emailcard" data-email="${usuario.email}">Email: ${usuario.email}</p>
                </div>
                <label for="perfilSelect">Perfil:</label>
                <select class="perfilSelect w3-select" required>
                    <option value="">Selecione</option>
                </select>
            `;
            const switchLabel = document.createElement('label');
            switchLabel.classList.add('switch');
            
            const ativeBtn = document.createElement('input');
            ativeBtn.id = "myCheck";
            ativeBtn.type = "checkbox";
            if(usuario.ativo===2){
                ativeBtn.checked = true
            }
            ativeBtn.addEventListener('click', async () => {
                if (ativeBtn.checked) {
                    const result = await this.inativeUsuario(usuario.email,2);
                    Swal.fire("Sucesso!", "Usuário bloqueado com sucesso!", "sucess");
                } else {
                    const result = await this.inativeUsuario(usuario.email,1);
                    Swal.fire("Sucesso!", "Usuário Ativado.", "sucess");
                }
            });
            const hr = document.createElement('hr');
            const span = document.createElement('span');
            span.innerText = "Bloquear Usuário"
            const sliderSpan = document.createElement('span');
            sliderSpan.classList.add('slider', 'round');
            switchLabel.appendChild(ativeBtn);
            switchLabel.appendChild(sliderSpan);
            container.appendChild(hr);
            container.appendChild(span);
            container.appendChild(switchLabel);
            const removeBtn = document.createElement('button');
            removeBtn.textContent = "Remover Usuário";
            removeBtn.classList.add("w3-button","w3-red", "w3-border", "w3-hover-black", "w3-block");
            removeBtn.addEventListener('click', async () => {
                const result = await this.deleteUsuario(usuario.email);
                if (result.status) {
                    Swal.fire("Sucesso!", "Usuário removido com sucesso!", "sucess");
                    container.remove();
                } else {
                    Swal.fire("Alerta!", "Erro ao remover usuário!", "info");
                }
            });
            container.appendChild(removeBtn);
            
            divUser.appendChild(container);
        });
        
    }
    async getPerfis() {
        return await this.buscaApi.fetchApi('Perfil', 'GET');
    }
    async populatePerfis() {
        const perfis = await this.getPerfis();
        const select = document.querySelectorAll('.perfilSelect');
        select.forEach(select => {
            while (select.options.length > 1) {
                select.remove(1);
            }
        perfis.forEach(perfil => {
            const option = document.createElement('option');
            option.value = perfil.id;
            option.textContent = perfil.nome;
            select.appendChild(option);
        });
        select.addEventListener('change', async (event) => {
            let email = document.getElementById("emailcard");
            const result = await this.perfilUsuario(email.dataset.email,event.target.value);
            if (result.status) {
                Swal.fire("Sucesso!", `${result.status.message}`, "sucess");
            }
        });
    });
        
    }
    render() {
        document.getElementById('titulo').innerHTML='Gerir Usuários';
        const mainDiv = document.createElement('div');
        mainDiv.className = 'main';
        return {
            element: mainDiv,
            init: () => this.init()
        };
    }
}
 |