// change_password.js - VERSÃO FINAL E COMPLETA

import { DataService } from './api.js';

document.addEventListener('DOMContentLoaded', () => {
    // Seletores de elementos
    const form = document.getElementById('change-password-form');
    const pageTitle = document.getElementById('page-title');
    const firstLoginMessage = document.getElementById('first-login-message');
    const feedbackDiv = document.getElementById('feedback');

    const currentPasswordField = document.getElementById('current-password');
    const newUsernameGroup = document.getElementById('new-username-group');
    const newUsernameField = document.getElementById('new-username');
    const newPasswordField = document.getElementById('new-password');
    const confirmPasswordField = document.getElementById('confirm-password');
    const changePasswordButton = document.getElementById('change-password-button');
    
    const termsContainer = document.getElementById('terms-container');
    const termsCheckbox = document.getElementById('terms-checkbox');
    
    const buttonText = document.getElementById('button-text');
    const spinner = document.getElementById('spinner');

    // Validação de Senha em Tempo Real
    newPasswordField.addEventListener('input', () => {
        const value = newPasswordField.value;
        document.getElementById('req-length').classList.toggle('valid', value.length >= 8);
        document.getElementById('req-uppercase').classList.toggle('valid', /[A-Z]/.test(value));
        document.getElementById('req-lowercase').classList.toggle('valid', /[a-z]/.test(value));
        document.getElementById('req-number').classList.toggle('valid', /\d/.test(value));
        document.getElementById('req-special').classList.toggle('valid', /[!@#$%^&*]/.test(value));
    });

    // Lógica de Inicialização da Página
    const storedUser = sessionStorage.getItem('currentUser');
    if (!storedUser) {
        window.location.href = 'login.html';
        return;
    }
    const currentUser = JSON.parse(storedUser);
    const isFirstLogin = parseInt(currentUser.primeiro_login) === 1;

    if (isFirstLogin) {
        // Configura a tela para o PRIMEIRO LOGIN
        pageTitle.textContent = 'Defina seu Usuário e Senha';
        firstLoginMessage.classList.remove('hidden');
        currentPasswordField.parentElement.classList.add('hidden'); // Esconde "Senha Atual"
        newUsernameGroup.classList.remove('hidden'); // Mostra "Novo Usuário"
        termsContainer.classList.remove('hidden'); // Mostra os Termos

        // Botão começa desabilitado e só habilita com o aceite
        changePasswordButton.disabled = true;
        changePasswordButton.classList.add('opacity-50', 'cursor-not-allowed');
        termsCheckbox.addEventListener('change', () => {
            const isChecked = termsCheckbox.checked;
            changePasswordButton.disabled = !isChecked;
            changePasswordButton.classList.toggle('opacity-50', !isChecked);
            changePasswordButton.classList.toggle('cursor-not-allowed', !isChecked);
        });
    } else {
        // Configura a tela para TROCA DE SENHA NORMAL
        pageTitle.textContent = 'Alterar Minha Senha';
    }

    // Lógica de Submissão do Formulário
    form.addEventListener('submit', async (e) => {
        e.preventDefault();
        feedbackDiv.classList.add('hidden');
        showLoading(true);

        if (isFirstLogin && !termsCheckbox.checked) {
            showFeedback('Você precisa aceitar os Termos de Serviço.');
            showLoading(false);
            return;
        }

        if (newPasswordField.value !== confirmPasswordField.value) {
            showFeedback('A nova senha e a confirmação não coincidem.');
            showLoading(false);
            return;
        }

        const payload = {
            userId: currentUser.id,
            currentPassword: currentPasswordField.value,
            newPassword: newPasswordField.value,
            isFirstLogin: isFirstLogin,
            newUsername: newUsernameField.value.trim()
        };

        try {
            const result = await DataService.changeUserPassword(payload, currentUser.role);
            
            showFeedback(result.message, 'success');
            
            currentUser.primeiro_login = 0;
            if (isFirstLogin) currentUser.name = payload.newUsername;
            sessionStorage.setItem('currentUser', JSON.stringify(currentUser));
            
            setTimeout(() => { window.location.href = 'index.html'; }, 2000);

        } catch (error) {
            showFeedback(error.message);
        } finally {
            showLoading(false);
        }
    });

    // Funções auxiliares
    function showFeedback(message, type = 'error') {
        feedbackDiv.textContent = message;
        feedbackDiv.className = `text-center font-medium p-3 rounded-md ${type === 'error' ? 'bg-red-100 text-red-700' : 'bg-green-100 text-green-700'}`;
        feedbackDiv.classList.remove('hidden');
    }
    function showLoading(isLoading) {
        changePasswordButton.disabled = isLoading;
        buttonText.classList.toggle('hidden', isLoading);
        spinner.classList.toggle('hidden', !isLoading);
    }
});