/* ==========================================================================
   AUTHENTICATION & SESSION CONTROLLER
   ========================================================================== */

const Auth = {
  init() {
    this.bindEvents();
    this.checkSession();
  },

  bindEvents() {
    const loginForm = document.getElementById('login-form');
    if (loginForm) {
      loginForm.addEventListener('submit', (e) => this.handleLogin(e));
    }

    // Botões de login rápido (demo)
    const btnQuickAdmin = document.getElementById('btn-quick-admin');
    if (btnQuickAdmin) {
      btnQuickAdmin.addEventListener('click', () => {
        document.getElementById('login-email').value = 'admin@duobi.com.br';
        document.getElementById('login-password').value = 'admin';
        document.getElementById('login-form').dispatchEvent(new Event('submit'));
      });
    }

    const btnQuickSupervisor = document.getElementById('btn-quick-supervisor');
    if (btnQuickSupervisor) {
      btnQuickSupervisor.addEventListener('click', () => {
        document.getElementById('login-email').value = 'supervisor@duotalk.com.br';
        document.getElementById('login-password').value = '123';
        document.getElementById('login-form').dispatchEvent(new Event('submit'));
      });
    }

    // Botão de Logout
    const btnLogout = document.getElementById('btn-logout');
    if (btnLogout) {
      btnLogout.addEventListener('click', () => this.logout());
    }
  },

  async handleLogin(e) {
    e.preventDefault();
    const email = document.getElementById('login-email').value.trim();
    const password = document.getElementById('login-password').value.trim();
    const btnSubmit = document.getElementById('btn-login-submit');

    if (!email || !password) {
      showToast('Por favor, preencha todos os campos.', 'error');
      return;
    }

    try {
      if (btnSubmit) {
        btnSubmit.disabled = true;
        btnSubmit.innerHTML = 'Autenticando...';
      }

      const res = await API.post('/api/auth/login', { email, password });
      if (res.success) {
        API.setToken(res.token);
        API.setCurrentUser(res.user);
        showToast(`Bem-vindo, ${res.user.nome}!`, 'success');
        this.renderUserProfile(res.user);
        window.App.showApp();
      }
    } catch (err) {
      showToast(err.message || 'Falha ao autenticar.', 'error');
    } finally {
      if (btnSubmit) {
        btnSubmit.disabled = false;
        btnSubmit.innerHTML = 'Entrar no Portal';
      }
    }
  },

  checkSession() {
    const token = API.getToken();
    const user = API.getCurrentUser();

    if (token && user) {
      this.renderUserProfile(user);
      window.App.showApp();
    } else {
      window.App.showLogin();
    }
  },

  getUser() {
    return API.getCurrentUser();
  },

  setUser(user) {
    localStorage.setItem('duobi_user', JSON.stringify(user));
  },

  renderUserProfile(user) {
    const cur = user || this.getUser();
    if (!cur) return;
    const nameEl = document.getElementById('sidebar-user-name');
    const roleEl = document.getElementById('sidebar-user-role');
    const avatarEl = document.getElementById('sidebar-user-avatar');

    if (nameEl) nameEl.textContent = cur.nome;
    if (roleEl) roleEl.textContent = cur.cargo || cur.role;
    if (avatarEl && cur.avatar) avatarEl.src = cur.avatar;
  },

  logout() {
    API.removeToken();
    localStorage.removeItem('duobi_user');
    localStorage.removeItem('oliveira_bi_user');
    showToast('Sessão encerrada com sucesso.', 'info');
    window.App.showLogin();
  }
};
