/**
 * Main Entry Point Kelompok C4A.
 * Menghubungkan pengambilan data dengan rendering UI dan interaksi halaman.
 */

import { getStaffData, getSopData, getFaqData } from './data.js';
import {
    renderStaffCards,
    renderSopCards,
    renderFaqSection,
    initSopInteraction,
    initAnimations,
    initFaq,
    applySopFilter
} from './ui.js';

// Cache data secara global untuk mendukung rendering UI
let cachedStaffData = [];
let cachedSopData = [];
let cachedFaqData = [];

/**
 * Menginisialisasi aplikasi dengan mengambil seluruh data secara pararel,
 * merender konten awal, serta mendaftarkan event listener interaksi UI.
 * @returns {Promise<void>}
 */
async function initApp() {
    try {
        const [staffData, sopData, faqData] = await Promise.all([
            getStaffData(),
            getSopData(),
            getFaqData()
        ]);

        cachedStaffData = staffData || [];
        cachedSopData = sopData || [];
        cachedFaqData = faqData || [];

        renderStaffCards(cachedStaffData);
        renderSopCards(cachedSopData);
        renderFaqSection(cachedFaqData);

        initSopInteraction();
        initFaq();

        // Memberikan sedikit waktu tunda (jeda) agar rendering DOM selesai sebelum memulai animasi.
        setTimeout(() => {
            initAnimations();
        }, 100);
    } catch (error) {
        console.error('Terjadi kesalahan saat menginisialisasi halaman:', error);
    }
}

// Re-render UI saat bahasa berubah (data tetap sama, hanya label UI yang berganti via t())
document.addEventListener('languageChanged', () => {
    renderStaffCards(cachedStaffData);
    renderSopCards(cachedSopData);
    renderFaqSection(cachedFaqData);
    initFaq();
    applySopFilter();

    // Re-inisialisasi observer agar elemen .reveal yang baru di-render mendapat class .visible
    setTimeout(() => {
        initAnimations();
    }, 100);
});

// Jalankan inisialisasi aplikasi saat DOM siap
document.addEventListener('DOMContentLoaded', initApp);

