class AuthForm extends HTMLElement { constructor() { super(); this.mode = 'login'; // 'login' or 'register' } connectedCallback() { this.render(); this.setupEventListeners(); } toggleMode() { this.mode = this.mode === 'login' ? 'register' : 'login'; this.render(); this.setupEventListeners(); } async handleSubmit(e) { e.preventDefault(); const formData = new FormData(e.target); const data = Object.fromEntries(formData.entries()); try { const endpoint = this.mode === 'login' ? '/auth/login' : '/auth/register'; const response = await fetch(`${API_BASE_URL}${endpoint}`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(data) }); if (!response.ok) { throw new Error(await response.text()); } const { token, user } = await response.json(); localStorage.setItem('token', token); localStorage.setItem('user', JSON.stringify(user)); if (user.role === 'admin') { redirectTo('/admin-dashboard.html'); } else { redirectTo('/dashboard.html'); } } catch (error) { showToast(error.message, 'error'); } } setupEventListeners() { this.querySelector('form').addEventListener('submit', (e) => this.handleSubmit(e)); this.querySelector('#toggleMode').addEventListener('click', () => this.toggleMode()); } render() { this.innerHTML = `
${this.mode === 'register' ? `
` : ''}
`; } } customElements.define('auth-form', AuthForm);