// user.js
// Autors: Kārlis Mālnieks
// Mērķis: Nodrošināt lietotāja sesijas pārvaldību, lietotāja profila ielādi un e-pasta maiņu.
// Apraksts: Šis skripts ļauj lietotājiem apskatīt un rediģēt savu profilu, kā arī pārvaldīt sesijas datus.
// Pārvalda lietotāja profila datu ielādi, sesijas autentifikāciju un e-pasta maiņas funkcionalitāti.

document.addEventListener('DOMContentLoaded', () => {
    const contentContainer = document.getElementById('content-container'); // Atsauce uz saturu, kur tiks ielādēts lietotāja profils.
    let sessionUserId = null; // Mainīgais lietotāja ID.
    let userLevel = null; // Mainīgais lietotāja līmenis.
    let classId = null; // Mainīgais grupas ID.

    // Funkcija, kas atjaunina saturu atkarībā no izvēlētā veida.
    const updateContent = async (content) => {
        if (content === 'user') {
            contentContainer.innerHTML = '<div class="loading">Ielādē lietotāja datus...</div>'; // Parāda ielādes paziņojumu.

            // Mēģina iegūt lietotāja profilu no servera.
            try {
                const response = await fetch('../php/get_user_profile.php');
                const data = await response.json(); // Pārvērš servera atbildi JSON formātā.

                // Ja lietotāja dati tika veiksmīgi saņemti.
                if (data.success) {
                    contentContainer.innerHTML = `
                        <div class="container">
                            <h2>${data.username}</h2>
                            <div class="user-details">
                                <p><strong>E-pasts:</strong> <span id="email-display">${data.email}</span></p>
                                <p><strong>Grupa:</strong> ${data.class}</p>
                                <button id="edit-email-btn" class="button">Mainīt e-pastu</button>
                            </div>
                            <div id="email-edit-container" class="email-edit-container hidden">
                                <form id="email-edit-form">
                                    <label for="new-email">Jaunais e-pasts:</label>
                                    <input type="email" id="new-email" name="new_email" required>
                                    <label for="current-password">Pašreizējā parole:</label>
                                    <input type="password" id="current-password" name="current_password" required>
                                    <button type="submit" class="button">Saglabāt</button>
                                    <button type="button" id="cancel-edit" class="button">Atcelt</button>
                                </form>
                            </div>
                        </div>
                    `;

                    attachEmailEditListeners(); // Pievieno klausītājus e-pasta maiņas funkcijai.
                } else {
                    contentContainer.innerHTML = `<div class="error">${data.message || 'Failed to load user data.'}</div>`; // Ja dati nav saņemti.
                }
            } catch (error) {
                console.error('Error fetching user profile:', error); // Izvada kļūdas konsolē, ja pieprasījums neizdodas.
                contentContainer.innerHTML = '<div class="error">Failed to load user data. Please try again later.</div>';
            }
        }
    };

    // Funkcija, lai iegūtu sesijas lietotāja datus.
    const getSessionUserData = async () => {
        try {
            const response = await fetch('../php/get_session_user.php');
            const data = await response.json(); // Pārvērš servera atbildi JSON formātā.

            // Ja lietotāja sesijas dati ir pieejami.
            if (data.user_id && data.user_level) {
                sessionUserId = data.user_id;
                userLevel = data.user_level;
                classId = data.class_id || null;
            } else if (data.error) {
                console.error('Session Error:', data.error); // Izvada kļūdas informāciju konsolē.
                window.location.href = '../php/logout.php'; // Ja sesija nav derīga, tiek veikta pārvirzīšana uz izrakstīšanās lapu.
            }
        } catch (error) {
            console.error('Error fetching session user data:', error); // Izvada kļūdas informāciju konsolē.
            contentContainer.innerHTML = '<div class="error">Unable to retrieve session data. Please try again later.</div>';
        }
    };

    // Funkcija pievieno klausītājus e-pasta maiņas formu.
    const attachEmailEditListeners = () => {
        const editEmailBtn = document.getElementById('edit-email-btn'); // Atsauce uz pogu, kas ļauj rediģēt e-pastu.
        const emailEditContainer = document.getElementById('email-edit-container'); // Atsauce uz formu, kas ļauj mainīt e-pastu.
        const cancelEditBtn = document.getElementById('cancel-edit'); // Atsauce uz pogu, kas ļauj atcelt e-pasta rediģēšanu.
        const emailEditForm = document.getElementById('email-edit-form'); // Atsauce uz e-pasta rediģēšanas formu.

        // Klausītājs pogai "Mainīt e-pastu".
        editEmailBtn.addEventListener('click', () => {
            emailEditContainer.classList.remove('hidden'); // Parāda e-pasta rediģēšanas formu.
            editEmailBtn.classList.add('hidden'); // Paslēpj pogu "Mainīt e-pastu".
        });

        // Klausītājs pogai "Atcelt".
        cancelEditBtn.addEventListener('click', () => {
            emailEditContainer.classList.add('hidden'); // Paslēpj e-pasta rediģēšanas formu.
            editEmailBtn.classList.remove('hidden'); // Parāda pogu "Mainīt e-pastu".
        });

        // Klausītājs e-pasta rediģēšanas formas nosūtīšanai.
        emailEditForm.addEventListener('submit', async (event) => {
            event.preventDefault(); // Novērš formas noklusējuma uzvedību.
            const newEmail = document.getElementById('new-email').value; // Iegūst jauno e-pastu.
            const currentPassword = document.getElementById('current-password').value; // Iegūst pašreizējo paroli.

            // Mēģina nosūtīt pieprasījumu serverim ar jauniem e-pasta datiem.
            try {
                const response = await fetch('../php/update_user_email.php', {
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/json', // Norāda, ka dati tiek sūtīti JSON formātā.
                    },
                    body: JSON.stringify({ new_email: newEmail, current_password: currentPassword }), // Nosūta datus serverim.
                });

                const data = await response.json(); // Pārvērš servera atbildi JSON formātā.

                if (data.success) {
                    document.getElementById('email-display').textContent = newEmail; // Atjauno e-pasta adresi lietotāja profilā.
                    emailEditContainer.classList.add('hidden'); // Paslēpj rediģēšanas formu.
                    editEmailBtn.classList.remove('hidden'); // Atjauno pogu "Mainīt e-pastu".
                    alert('E-pasts veiksmīgi mainīts!'); // Paziņo lietotājam par veiksmīgu izmaiņu.
                } else {
                    alert(data.message || 'Failed to update email.'); // Parāda kļūdas ziņojumu, ja izmaiņas neizdevās.
                }
            } catch (error) {
                console.error('Error updating email:', error); // Izvada kļūdas informāciju konsolē.
                alert('An error occurred. Please try again.'); // Parāda paziņojumu lietotājam, ja radās kļūda.
            }
        });
    };

    // Iegūst saglabāto izvēlēto saturu no vietējās krātuves vai izmanto noklusējuma vērtību 'feed'.
    const savedContent = localStorage.getItem('selectedContent') || 'feed';

    // Pārbauda lietotāja sesijas datus un atjaunina saturu.
    getSessionUserData().then(() => {
        updateContent(savedContent); // Atjaunina saturu pēc lietotāja sesijas datiem.
    });

    // Klausītāji pogām, kas pārslēdz saturu.
    document.querySelectorAll('.sidebar button').forEach((button) => {
        button.addEventListener('click', (event) => {
            const content = event.target.getAttribute('data-content'); // Iegūst izvēlēto saturu no pogas datu atribūta.
            if (content) {
                updateContent(content); // Atjaunina saturu atbilstoši izvēlētajam saturam.
                localStorage.setItem('selectedContent', content); // Saglabā izvēlēto saturu vietējā krātuvē.
            }
        });
    });
});
