// ==================== TÉLÉCHARGEMENT RÈGLEMENT PDF ====================
document.getElementById('downloadReglementBtn')?.addEventListener('click', function() {
    const link = document.createElement('a');
    link.href = 'centreCPN.pdf';
    link.download = 'centreCPN.pdf';
    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
});

// ==================== DONNÉES FORMATIONS & DIPLÔMES (STATIQUES) ====================
const formationDetails = {
    informatique: {
        image: "img4.png", title: 'Informatique',
        description: 'Maîtrisez les outils et technologies les plus demandés sur le marché du travail.',
        modules: ['Bureautique (Word, Excel, PowerPoint, Access)', 'Programmation (HTML, CSS, PHP, Python)', 'Développement web et mobile', 'Design graphique (Photoshop, Illustrator)', 'Réseaux et systèmes', 'Cybersécurité'],
        duree: '6 à 24 mois selon le parcours', prerequis: 'Aucun niveau requis (adapté aux débutants)',
        debouches: ['Développeur web', 'Technicien support', 'Community manager', 'Infographiste'],
        certifications: ['ICDL', 'TOSA', 'Certificat CPN'], modalites: ['Cours du jour', 'Cours du soir', 'Formation en ligne']
    },
    comptabilite: {
        image: "img3.png", title: 'Comptabilité & Gestion',
        description: 'Formation complète aux métiers de la comptabilité et de la gestion d\'entreprise.',
        modules: ['Comptabilité générale', 'Comptabilité commerciale', 'Gestion de stock', 'Logiciels Ciel et Siège', 'Gestion d\'entreprise', 'Fiscalité', 'Paie et RH'],
        duree: '6 à 18 mois', prerequis: 'Niveau 9ème de base minimum',
        debouches: ['Comptable', 'Aide-comptable', 'Gestionnaire de paie', 'Assistant administratif'],
        certifications: ['Titre professionnel', 'Certificat CPN'], modalites: ['Cours du jour', 'Alternance possible']
    },
    langues: {
        image: "img2.png", title: 'Langues Étrangères',
        description: 'Apprenez les langues essentielles pour booster votre carrière.',
        modules: ['Anglais général et professionnel', 'Français (FLE, affaires)', 'Allemand débutant à avancé', 'Préparation TOEIC/TOEFL', 'Anglais technique', 'Communication orale et écrite'],
        duree: '3 à 12 mois selon le niveau', prerequis: 'Test de placement gratuit',
        debouches: ['Assistant international', 'Guide touristique', 'Enseignant', 'Traducteur'],
        certifications: ['TOEIC', 'TOEFL', 'Goethe-Zertifikat'], modalites: ['Cours intensifs', 'Cours du soir', 'Stage linguistique']
    },
    icdl: {
        image: "img1.png", title: 'ICDL',
        description: 'Certification internationale reconnue qui valide vos compétences numériques.',
        modules: ['Essentiel de l\'ordinateur', 'Essentiel en ligne', 'Traitement de texte', 'Tableur', 'Présentation', 'Utilisation des bases de données', 'Collaboration en ligne'],
        duree: '3 à 6 mois', prerequis: 'Connaissances de base en informatique',
        debouches: ['Certification professionnelle', 'Valorisation CV'],
        certifications: ['ICDL Profile', 'ICDL Workforce'], modalites: ['Préparation intensive', 'Examen blanc inclus']
    }
};

const diplomeDetails = {
    btp: { image: "btp1.png", title: 'BTP', subtitle: 'Brevet de Technicien Professionnel', description: 'Diplôme d\'État préparant aux métiers techniques.', specialites: ['Infographie', 'Comptabilité'], duree: '2 ans', prerequis: '2ème secondaire', debouches: ['Technicien en infographie', 'Aide-comptable', 'Assistant technique'], modalites: ['Formation en présentiel', 'Stage en entreprise obligatoire'], certification: 'Diplôme d\'État reconnu' },
    bts: { image: "bts1.png", title: 'BTS', subtitle: 'Brevet de Technicien Supérieur', description: 'Diplôme de niveau supérieur spécialisé en multimédia.', specialites: ['Multimédia'], duree: '2 ans', prerequis: 'Bac ou BIP', debouches: ['Technicien supérieur multimédia', 'Concepteur digital', 'Chef de projet junior'], modalites: ['Cours théoriques', 'Projets pratiques', 'Stage de fin d\'études'], certification: 'Diplôme d\'État' },
    capi: { image: "info.png", title: 'CAPI', subtitle: 'Certificat d\'Aptitude Professionnelle en Informatique', description: 'Certification professionnelle en informatique.', specialites: ['Informatique'], duree: '1 an', prerequis: '9ème de base', debouches: ['Opérateur informatique', 'Assistant support', 'Technicien de base'], modalites: ['Formation pratique', 'Travaux dirigés'], certification: 'Certification professionnelle' },
    cff: { image: "cff.png", title: 'CFF', subtitle: 'Certificat de Formation de base', description: 'Formation générale de base certifiée par l\'État.', specialites: ['Formation générale'], duree: '1 an', prerequis: '9ème de base', debouches: ['Poursuite d\'études', 'Insertion professionnelle de base'], modalites: ['Cours généraux', 'Initiation professionnelle'], certification: 'Certifié par l\'État' },
    atbig: { image: "AG.png", title: 'ATBIG', subtitle: 'Attestation en Bureautique et Gestion', description: 'Formation professionnelle en bureautique et gestion.', specialites: ['Bureautique', 'Gestion'], duree: '1 an', prerequis: 'Secondaire', debouches: ['Assistant bureautique', 'Secrétaire comptable', 'Gestionnaire administratif'], modalites: ['Cours pratiques', 'Ateliers'], certification: 'Attestation professionnelle' },
    atmi: { image: "AT.png", title: 'ATMI', subtitle: 'Attestation en Multimédia', description: 'Formation aux métiers du multimédia et du design.', specialites: ['Design', 'Multimédia'], duree: '1 an', prerequis: 'Secondaire', debouches: ['Assistant multimédia', 'Infographiste junior', 'Monteur vidéo'], modalites: ['Ateliers créatifs', 'Projets'], certification: 'Attestation professionnelle' },
    tmi: { image: "TM.png", title: 'TMI', subtitle: 'Technicien Multimédia', description: 'Formation de technicien spécialisé en multimédia.', specialites: ['Technicien', 'Multimédia'], duree: '1 an', prerequis: 'ATMI + CAPI/CFF', debouches: ['Technicien multimédia', 'Intégrateur web', 'Community manager'], modalites: ['Cours techniques', 'Projets professionnels'], certification: 'Technicien spécialisé' }
};

// ==================== AFFICHAGE DÉTAILS FORMATION ====================
window.showFormationDetails = function(key) {
    const data = formationDetails[key];
    if (!data) return;
    modalBody.innerHTML = `
        <div class="modal-header">
            <div class="modal-icon"><img src="${data.image}" alt="${data.title}"></div>
            <h3>${data.title}</h3>
        </div>
        <div class="modal-section"><p style="color: #cbd5e1; font-size: 1.1rem;">${data.description}</p></div>
        <div class="modal-section"><h4><i class="fas fa-book-open"></i> Modules de formation</h4><ul>${data.modules.map(m => `<li><i class="fas fa-check-circle"></i> ${m}</li>`).join('')}</ul></div>
        <div class="modal-grid"><div class="modal-badge"><i class="fas fa-clock"></i><span>Durée</span><small>${data.duree}</small></div><div class="modal-badge"><i class="fas fa-level-up-alt"></i><span>Prérequis</span><small>${data.prerequis}</small></div></div>
        <div class="modal-section"><h4><i class="fas fa-briefcase"></i> Débouchés</h4><ul>${data.debouches.map(d => `<li><i class="fas fa-arrow-right"></i> ${d}</li>`).join('')}</ul></div>
        <div class="modal-section"><h4><i class="fas fa-certificate"></i> Certifications</h4><ul>${data.certifications.map(c => `<li><i class="fas fa-medal"></i> ${c}</li>`).join('')}</ul></div>
        <div class="modal-section"><h4><i class="fas fa-calendar-alt"></i> Modalités</h4><ul>${data.modalites.map(m => `<li><i class="fas fa-check"></i> ${m}</li>`).join('')}</ul></div>
        <button class="modal-btn" onclick="closeModalAndGoToInscription('${data.title}')"><i class="fas fa-paper-plane"></i> S'inscrire à cette formation</button>
    `;
    openModal();
};


// ==================== AFFICHAGE DÉTAILS DIPLÔME ====================
window.showDiplomeDetails = function(key) {
    const data = diplomeDetails[key];
    if (!data) return;
    modalBody.innerHTML = `
        <div class="modal-header">
            <div class="modal-icon"><img src="${data.image}" alt="${data.title}"></div>
            <h3>${data.title}</h3>
        </div>
        <div class="modal-section"><span class="diplome-badge" style="margin-bottom: 1rem; display: inline-block;">${data.subtitle}</span><p style="color: #cbd5e1; font-size: 1.1rem;">${data.description}</p></div>
        <div class="modal-section"><h4><i class="fas fa-tags"></i> Spécialités</h4><div>${data.specialites.map(s => `<span class="specialite-tag">${s}</span>`).join('')}</div></div>
        <div class="modal-grid"><div class="modal-badge"><i class="fas fa-clock"></i><span>Durée</span><small>${data.duree}</small></div><div class="modal-badge"><i class="fas fa-level-up-alt"></i><span>Prérequis</span><small>${data.prerequis}</small></div></div>
        <div class="modal-section"><h4><i class="fas fa-briefcase"></i> Débouchés</h4><ul>${data.debouches.map(d => `<li><i class="fas fa-arrow-right"></i> ${d}</li>`).join('')}</ul></div>
        <div class="modal-section"><h4><i class="fas fa-calendar-alt"></i> Modalités</h4><ul>${data.modalites.map(m => `<li><i class="fas fa-check"></i> ${m}</li>`).join('')}</ul></div>
        <div class="modal-section"><h4><i class="fas fa-certificate"></i> Certification</h4><p style="color: #cbd5e1;">${data.certification}</p></div>
        <button class="modal-btn" onclick="closeModalAndGoToInscription('${data.title}')"><i class="fas fa-paper-plane"></i> Demander des informations</button>
    `;
    openModal();
};

// ==================== FERMER MODALE ET ALLER À L'INSCRIPTION ====================
function closeModalAndGoToInscription(formationName) {
    closeModal();
    const formationSelect = document.getElementById('formation');
    if (formationSelect && formationName) {
        for (let i = 0; i < formationSelect.options.length; i++) {
            if (formationSelect.options[i].value === formationName) {
                formationSelect.selectedIndex = i;
                break;
            }
        }
    }
    document.getElementById('inscription').scrollIntoView({ behavior: 'smooth' });
}

// ==================== CHARGEMENT DES FORMATIONS DANS LE SELECT ====================
function chargerFormationsSelect() {
    fetch('api_get_formation.php')
        .then(response => response.json())
        .then(data => {
            if (data.success && data.formations && data.formations.length > 0) {
                const select = document.getElementById('formation');
                if (select) {
                    select.innerHTML = '<option value="">Sélectionner une formation</option>';
                    const groupes = {
                        'homologué': '🏛️ Formations homologuées (Diplômes d\'État)',
                        'certifiant': '📜 Formations certifiantes',
                        'privé': '🏫 Formations privées',
                        'accéléré': '⚡ Formations accélérées',
                        'à la carte': '📋 Formations à la carte'
                    };
                    Object.keys(groupes).forEach(type => {
                        const formationsType = data.formations.filter(f => f.type_formation === type);
                        if (formationsType.length > 0) {
                            const optgroup = document.createElement('optgroup');
                            optgroup.label = groupes[type];
                            formationsType.forEach(formation => {
                                const option = document.createElement('option');
                                option.value = formation.nom_formation;
                                option.textContent = `${formation.nom_formation} (${formation.duree} mois)`;
                                optgroup.appendChild(option);
                            });
                            select.appendChild(optgroup);
                        }
                    });
                }
            }
        })
        .catch(error => console.error('Erreur chargement select formations:', error));
}

// ==================== GALERIE DYNAMIQUE PAR ANNÉE ====================
const galerieData = {
    "2023": ["img1.jpeg", "img2.jpeg", "img3.jpeg", "img8.jpeg", "img6.jpeg"],
    "2024": ["img5.jpeg", "img4.jpeg", "img7.jpeg", "img9.jpeg", "img10.jpeg"]
};

function genererOnglets() {
    const tabsContainer = document.getElementById("galerieTabs");
    if (!tabsContainer) return;
    const annees = Object.keys(galerieData).sort().reverse();
    tabsContainer.innerHTML = "";
    annees.forEach((annee, idx) => {
        const btn = document.createElement("button");
        btn.className = "tab-annee" + (idx === 0 ? " active" : "");
        btn.textContent = `Promotion ${annee}`;
        btn.dataset.annee = annee;
        btn.addEventListener("click", () => {
            document.querySelectorAll(".tab-annee").forEach(b => b.classList.remove("active"));
            btn.classList.add("active");
            afficherImages(annee);
        });
        tabsContainer.appendChild(btn);
    });
    if (annees.length) afficherImages(annees[0]);
}

function afficherImages(annee) {
    const grid = document.getElementById("galerieGrid");
    if (!grid) return;
    const images = galerieData[annee] || [];
    if (images.length === 0) {
        grid.innerHTML = `<div style="text-align:center; padding:2rem;">Aucune image pour ${annee}</div>`;
        return;
    }
    grid.innerHTML = images.map(img => `
        <div class="galerie-item">
            <img src="${img}" alt="Activité CPN ${annee}">
            <div class="galerie-overlay"><i class="fas fa-search-plus"></i></div>
        </div>
    `).join("");
    document.querySelectorAll('.galerie-item img').forEach(img => {
        img.addEventListener('click', (e) => {
            e.stopPropagation();
            openLightbox(img.src);
        });
    });
}


// ==================== LIGHTBOX ====================
const lightbox = document.getElementById('lightbox');
const lightboxImg = document.getElementById('lightboxImg');
const closeLightboxBtn = document.querySelector('.lightbox-close');

function openLightbox(imgSrc) {
    if (lightboxImg) lightboxImg.src = imgSrc;
    if (lightbox) lightbox.classList.add('active');
    document.body.style.overflow = 'hidden';
}
function closeLightboxFn() {
    if (lightbox) lightbox.classList.remove('active');
    document.body.style.overflow = '';
}
if (closeLightboxBtn) {
    closeLightboxBtn.addEventListener('click', closeLightboxFn);
}
if (lightbox) {
    lightbox.addEventListener('click', (e) => {
        if (e.target === lightbox) closeLightboxFn();
    });
}
document.addEventListener('keydown', (e) => {
    if (e.key === 'Escape' && lightbox && lightbox.classList.contains('active')) {
        closeLightboxFn();
    }
});

// ==================== THREE.JS BACKGROUND ====================
const canvas = document.getElementById('canvas-bg');
if (canvas && typeof THREE !== 'undefined') {
    const scene = new THREE.Scene();
    const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
    const renderer = new THREE.WebGLRenderer({ canvas, alpha: true });
    renderer.setSize(window.innerWidth, window.innerHeight);
    const particlesGeo = new THREE.BufferGeometry();
    const count = 1800;
    const positions = new Float32Array(count * 3);
    for (let i = 0; i < count * 3; i += 3) {
        positions[i] = (Math.random() - 0.5) * 50;
        positions[i+1] = (Math.random() - 0.5) * 30;
        positions[i+2] = (Math.random() - 0.5) * 35;
    }
    particlesGeo.setAttribute('position', new THREE.BufferAttribute(positions, 3));
    const particlesMat = new THREE.PointsMaterial({ color: 0x3b82f6, size: 0.09, transparent: true, opacity: 0.5 });
    const particles = new THREE.Points(particlesGeo, particlesMat);
    scene.add(particles);
    camera.position.z = 14;
    function animateBg() {
        requestAnimationFrame(animateBg);
        particles.rotation.y += 0.0008;
        particles.rotation.x += 0.0004;
        renderer.render(scene, camera);
    }
    animateBg();
    window.addEventListener('resize', () => {
        camera.aspect = window.innerWidth / window.innerHeight;
        camera.updateProjectionMatrix();
        renderer.setSize(window.innerWidth, window.innerHeight);
    });
}

// ==================== REVEAL ON SCROLL ====================
const reveals = document.querySelectorAll('.reveal');
const observer = new IntersectionObserver((entries) => {
    entries.forEach(e => { if (e.isIntersecting) e.target.classList.add('active'); });
}, { threshold: 0.1 });
reveals.forEach(r => observer.observe(r));

// ==================== COMPTE À REBOURS SÉMINAIRE ====================
function updateSeminaireCountdown() {
    const targetDate = new Date(2026, 3, 20, 9, 0, 0);
    const now = new Date();
    const diff = targetDate - now;
    const badge = document.getElementById('seminaireBadge');
    const daysSpan = document.getElementById('days');
    const hoursSpan = document.getElementById('hours');
    const minutesSpan = document.getElementById('minutes');
    const secondsSpan = document.getElementById('seconds');
    
    if (!badge) return;
    
    if (diff <= 0) {
        if (now >= targetDate && now <= new Date(2026, 3, 16, 18, 0, 0)) {
            badge.innerHTML = '🎉 En cours !';
            badge.style.background = 'linear-gradient(135deg, #10b981, #059669)';
        } else {
            badge.innerHTML = '✅ Terminé';
            badge.style.background = 'linear-gradient(135deg, #6b7280, #4b5563)';
        }
        if (daysSpan) daysSpan.innerText = '00';
        if (hoursSpan) hoursSpan.innerText = '00';
        if (minutesSpan) minutesSpan.innerText = '00';
        if (secondsSpan) secondsSpan.innerText = '00';
        return;
    }
    const days = Math.floor(diff / (1000 * 60 * 60 * 24));
    const hours = Math.floor((diff % (86400000)) / (3600000));
    const minutes = Math.floor((diff % 3600000) / 60000);
    const seconds = Math.floor((diff % 60000) / 1000);
    if (daysSpan) daysSpan.innerText = days.toString().padStart(2, '0');
    if (hoursSpan) hoursSpan.innerText = hours.toString().padStart(2, '0');
    if (minutesSpan) minutesSpan.innerText = minutes.toString().padStart(2, '0');
    if (secondsSpan) secondsSpan.innerText = seconds.toString().padStart(2, '0');
    
    if (days <= 7) {
        badge.innerHTML = '🔥 Très bientôt !';
        badge.style.background = 'linear-gradient(135deg, #f97316, #dc2626)';
    } else {
        badge.innerHTML = '📢 À venir';
        badge.style.background = 'linear-gradient(135deg, #3b82f6, #a855f7)';
    }
}
setInterval(updateSeminaireCountdown, 1000);
updateSeminaireCountdown();

// ==================== MODALE ====================
const modalOverlay = document.getElementById('modalOverlay');
const modalBody = document.getElementById('modalBody');
const modalClose = document.getElementById('modalClose');

function openModal() {
    if (modalOverlay) {
        modalOverlay.classList.add('active');
        document.body.classList.add('modal-open');
    }
}
function closeModal() {
    if (modalOverlay) {
        modalOverlay.classList.remove('active');
        document.body.classList.remove('modal-open');
    }
}
if (modalClose) {
    modalClose.addEventListener('click', closeModal);
}
if (modalOverlay) {
    modalOverlay.addEventListener('click', (e) => {
        if (e.target === modalOverlay) closeModal();
    });
}

// ==================== CHATBOT BILINGUE ====================
const chatbotBtn = document.getElementById('chatbotBtn');
const chatbotPanel = document.getElementById('chatbotPanel');
const chatMessages = document.getElementById('chatMessages');
const chatInput = document.getElementById('chatInput');
const sendChatBtn = document.getElementById('sendChat');
let isWaiting = false;

function detectLang(text) { 
    return /[\u0600-\u06FF]/.test(text) ? 'ar' : 'fr'; 
}

function normalize(str) { 
    return str.toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g, ''); 
}

const KB = [
    { patterns_fr: ["bonjour","salut","bonsoir","coucou","hello","hi","hey","bonne journée"], patterns_ar: [], answer_fr: "👋 Bonjour et bienvenue au CPN Msaken !\n\nJe suis votre assistant virtuel. Je peux vous renseigner sur :\n• Nos formations et spécialités\n• Les niveaux requis et inscriptions\n• Les frais, durées et horaires\n• La localisation et les contacts\n\nQue souhaitez-vous savoir ?", answer_ar: "", suggestions_fr: ["Quelles formations ?","Comment s'inscrire ?","Contacter le centre"], suggestions_ar: [] },
    { patterns_fr: [], patterns_ar: ["سلام","السلام","أهلا","مرحبا","صباح","مساء","كيفاش","كيف","نهارك","لاباس","لا باس","يسلمو","يعيشك","شنو","شنوا","شبيك","علاش"], answer_fr: "", answer_ar: "👋 أهلاً وسهلاً بك في مركز CPN مساكن!\n\nأنا مساعدك الافتراضي، نجاوبك على كل أسئلتك على طول 😊\n\nباش نعاونك، قولّي شنوّا تحب تعرف :\n• الشعب والتكوينات المتاحة\n• الشروط والمستوى المطلوب\n• كيفاش تتسجل\n• الأسعار والمدد\n• الموقع وكيفاش تتصل بينا\n\nاسأل براحتك! 🎓", suggestions_fr: [], suggestions_ar: ["شنوّا التكوينات؟","كيفاش نتسجل؟","المستوى المطلوب","السعر والمدة","كيفاش تتصل بينا"] },
    { patterns_fr: ["spécialit","formation","filière","domaine","cours","propose","offre"], patterns_ar: ["تكوين","شعبة","تخصص","دراسة","فيلير","برنامج","يوفر","عندكم","شنوا عندكم","كورس"], answer_fr: "Le CPN Msaken propose plusieurs domaines :\n\n📌 Formations diplômantes :\n• BTP — 2 ans (niveau 2e secondaire)\n• BTS Multimédia — 2 ans (Bac ou BIP)\n• CAPI Informatique — 1 an (9e de base)\n• CFF Formation de base — 1 an (9e de base)\n• ATBIG Bureautique/Gestion — 1 an (secondaire)\n• ATMI Multimédia — 1 an (secondaire)\n• TMI Technicien Multimédia — 1 an (après ATMI + CAPI/CFF)\n\n📌 Formations courtes :\n• Informatique (Bureautique, Web, Design, Réseaux, Python…)\n• Comptabilité (Générale, Ciel/Siège, Fiscalité, Paie)\n• Langues (Anglais, Français FLE, Allemand)\n• Certification ICDL", answer_ar: "مركز CPN مساكن يوفّر تكوينات متنوعة :\n\n📌 تكوينات بشهادة رسمية :\n• BTP — سنتين (مستوى 2 ثانوي)\n• BTS Multimédia — سنتين (باكالوريا أو BIP)\n• CAPI إعلامية — سنة واحدة (9 أساسي)\n• CFF تكوين أساسي — سنة واحدة (9 أساسي)\n• ATBIG مكتبية/تصرف — سنة واحدة (ثانوي)\n• ATMI وسائط متعددة — سنة واحدة (ثانوي)\n• TMI تقني وسائط — سنة واحدة (بعد ATMI + CAPI/CFF)\n\n📌 تكوينات قصيرة :\n• إعلامية (مكتبية، ويب، تصميم، شبكات، Python…)\n• محاسبة (عامة، برامج Ciel/Siège، جباية، أجور)\n• لغات (إنجليزية، فرنسية FLE، ألمانية)\n• شهادة ICDL دولية", suggestions_fr: ["Niveaux requis","Durée des formations","Comment s'inscrire ?"], suggestions_ar: ["المستوى المطلوب","مدة التكوين","كيفاش نتسجل؟"] },
    { patterns_fr: ["niveau","prérequis","requis","besoin de","admis","accès","entrer","condition"], patterns_ar: ["مستوى","شرط","لازم","يلزم","قبول","دخول","ادخل","يقبل","مستواي"], answer_fr: "📋 Niveau scolaire requis par spécialité :\n\n• BTP : 2e année secondaire\n• BTS Multimédia : Bac ou BIP\n• CAPI Informatique : 9e de base\n• CFF : 9e de base\n• ATBIG Bureautique/Gestion : niveau secondaire\n• ATMI Multimédia : niveau secondaire\n• TMI : ATMI + CAPI ou CFF\n\nFormations courtes (Bureautique, Langues, Compta) : aucun prérequis strict.", answer_ar: "📋 المستوى المطلوب لكل تخصص :\n\n• BTP : السنة 2 ثانوي\n• BTS وسائط متعددة : باكالوريا أو BIP\n• CAPI إعلامية : 9 أساسي\n• CFF : 9 أساسي\n• ATBIG مكتبية/تصرف : مستوى ثانوي\n• ATMI وسائط متعددة : مستوى ثانوي\n• TMI : لازم عندك ATMI + CAPI أو CFF\n\nبالنسبة للتكوينات القصيرة (مكتبية، لغات، محاسبة) : ما كاش شروط صارمة.", suggestions_fr: ["Quelle formation me convient ?","Frais de formation","Comment s'inscrire ?"], suggestions_ar: ["أنجم ندخل بمستواي؟","السعر والمدة","كيفاش نتسجل؟"] },
    { patterns_fr: ["me convient","quel pour moi","recommand","conseill","orienter","guide","choisir","profil"], patterns_ar: ["يناسبني","مناسب","وليت","عندي","مستواي","أنجم","انجم","باكالوريا","9 أساسي","ثانوي","بكالوريا","ينفعني"], answer_fr: "🎯 Quelle formation selon votre profil :\n\n🔵 Niveau 9e de base :\n→ CAPI Informatique (1 an)\n→ CFF Formation de base (1 an)\n\n🟡 Niveau secondaire :\n→ ATBIG Bureautique/Gestion (1 an)\n→ ATMI Multimédia (1 an)\n→ BTP à partir de 2e secondaire (2 ans)\n\n🟢 Niveau Bac / BIP :\n→ BTS Multimédia (2 ans)\n→ Toutes les formations courtes\n\n🔴 Après ATMI + CAPI/CFF :\n→ TMI Technicien Multimédia (1 an)\n\nContactez-nous pour un conseil personnalisé !", answer_ar: "🎯 التكوين المناسب حسب مستواك :\n\n🔵 مستوى 9 أساسي :\n→ CAPI إعلامية (سنة)\n→ CFF تكوين أساسي (سنة)\n\n🟡 مستوى ثانوي :\n→ ATBIG مكتبية/تصرف (سنة)\n→ ATMI وسائط متعددة (سنة)\n→ BTP من 2 ثانوي (سنتين)\n\n🟢 مستوى باكالوريا / BIP :\n→ BTS وسائط متعددة (سنتين)\n→ كل التكوينات القصيرة\n\n🔴 بعد ATMI + CAPI/CFF :\n→ TMI تقني وسائط (سنة)\n\nاتصل بينا باش نعطيوك نصيحة شخصية! 📞", suggestions_fr: ["Niveaux requis","Frais de formation","Comment s'inscrire ?"], suggestions_ar: ["المستوى المطلوب","السعر والمدة","كيفاش نتسجل؟"] },
    { patterns_fr: ["matière","programme","contenu","module","enseign","cours de","apprend"], patterns_ar: ["مادة","مواد","برنامج","محتوى","ماذا يدرس","شنوا يتعلم","ماذا نتعلم","شنوا يدرسو"], answer_fr: "📚 Contenu des formations :\n\n🖥️ Informatique / Multimédia :\nBureautique, HTML/CSS, PHP, Python, Web design, Infographie, Réseaux, Montage vidéo\n\n📊 Comptabilité & Gestion :\nComptabilité générale, Ciel, Siège, Fiscalité, Paie, SAGE\n\n🌍 Langues :\nAnglais, Français FLE, Allemand\n\n🏗️ BTP :\nDessin technique, topographie, matériaux, génie civil\n\nPour un programme détaillé, contactez-nous.", answer_ar: "📚 محتوى التكوينات :\n\n🖥️ إعلامية / وسائط متعددة :\nمكتبية، HTML/CSS، PHP، Python، تصميم ويب، إنفوغرافيا، شبكات، مونتاج فيديو\n\n📊 محاسبة وتصرف :\nمحاسبة عامة، Ciel، Siège، جباية، أجور، SAGE\n\n🌍 لغات :\nإنجليزية، فرنسية FLE، ألمانية\n\n🏗️ BTP :\nرسم تقني، طوبوغرافيا، مواد البناء، هندسة مدنية\n\nللبرنامج التفصيلي، اتصل بينا مباشرة.", suggestions_fr: ["Durée des formations","Frais de formation","Certifications proposées"], suggestions_ar: ["مدة التكوين","السعر","الشهادات المقدمة"] },
    { patterns_fr: ["date","inscri","quand","période","rentrée","début","session","commenc"], patterns_ar: ["تاريخ","تسجيل","وقتاش","متى","بداية","دخول","موسم","الدخول المدرسي"], answer_fr: "📅 Inscriptions et sessions :\n\n• Formations courtes : inscriptions ouvertes toute l'année\n• Formations diplômantes (BTP, BTS, CAPI…) : rentrée septembre/octobre\n• Session de rattrapage possible en janvier\n\nInscrivez-vous tôt pour réserver votre place !\n📱 +216 73 265 459\n📱 +216 98 275 612\n📧 Centre.cpn@gmail.com", answer_ar: "📅 التسجيل والدورات :\n\n• التكوينات القصيرة : تسجيل مفتوح طول العام\n• التكوينات بشهادة (BTP, BTS, CAPI…) : دخول سبتمبر/أكتوبر\n• دورة استدراكية ممكنة في جانفي\n\nسجّل بكري باش تضمن مكانك! 😊\n📱 +216 73 265 459\n📱 +216 98 275 612\n📧 Centre.cpn@gmail.com", suggestions_fr: ["Comment s'inscrire ?","Frais de formation","Contacter le centre"], suggestions_ar: ["كيفاش نتسجل؟","السعر","كيفاش تتصل بينا"] },
    { patterns_fr: ["frais","prix","coût","tarif","combien","payer","montant","gratuit"], patterns_ar: ["سعر","ثمن","أسعار","بكاش","قداش","مصاريف","معلوم","تسديد","ادفع","غالي","رخيص"], answer_fr: "💰 Frais de formation :\n\nLes tarifs varient selon le type de formation :\n• Formations courtes : tarif abordable selon le module\n• Formations diplômantes : tarif annuel, paiement par tranche possible\n• Certification ICDL : frais spécifiques\n\nPour les tarifs exacts :\n📱 +216 73 265 459\n📱 +216 98 275 612\n📧 Centre.cpn@gmail.com", answer_ar: "💰 أسعار التكوينات :\n\nالأسعار تتفاوت حسب نوع التكوين :\n• التكوينات القصيرة : سعر معقول حسب الوحدة\n• التكوينات بشهادة : معلوم سنوي، ممكن الدفع على أقساط\n• شهادة ICDL : معلوم خاص\n\nللأسعار الدقيقة اتصل بينا :\n📞 +216 73 265 459\n📱 +216 98 275 612\n📧 Centre.cpn@gmail.com", suggestions_fr: ["Comment s'inscrire ?","Dates d'inscription","Localisation"], suggestions_ar: ["كيفاش نتسجل؟","تواريخ التسجيل","الموقع"] },
    { patterns_fr: ["durée","combien de temps","mois","semaine","longtemps","dure"], patterns_ar: ["مدة","كم مدة","قداش","أشهر","سنة","سنوات","وقت","قديش"], answer_fr: "⏱️ Durée des formations :\n\n📌 Diplômantes :\n• BTP, BTS : 2 ans\n• CAPI, CFF, ATBIG, ATMI, TMI : 1 an\n\n📌 Courtes :\n• Bureautique, Langues, Comptabilité : quelques semaines à 3 mois\n• Certification ICDL : variable", answer_ar: "⏱️ مدة التكوينات :\n\n📌 بشهادة :\n• BTP وBTS : سنتين\n• CAPI، CFF، ATBIG، ATMI، TMI : سنة واحدة\n\n📌 القصيرة :\n• مكتبية، لغات، محاسبة : من أسابيع إلى 3 أشهر\n• شهادة ICDL : يتفاوت", suggestions_fr: ["Frais de formation","Niveaux requis","Certifications proposées"], suggestions_ar: ["السعر","المستوى المطلوب","الشهادات"] },
    { patterns_fr: ["horaire","heure","ouvert","ferme","schedule"], patterns_ar: ["وقت","وقتاش","ساعات","يفتح","يغلق","صباح","بعد الزوال","ليل","مساء"], answer_fr: "🕐 Horaires du centre :\n\n• Lun – Ven : 8h00 – 18h00\n• Samedi : 9h00 – 13h00\n• Dimanche : Fermé\n\nDes horaires flexibles (matin/soir) sont disponibles selon les formations.", answer_ar: "🕐 أوقات عمل المركز :\n\n• الإثنين – الجمعة : 8h00 – 18h00\n• السبت : 9h00 – 13h00\n• الأحد : مغلق\n\nكاين أوقات مرنة (صباح / مساء) حسب التكوين.", suggestions_fr: ["Contacter le centre","Localisation","Comment s'inscrire ?"], suggestions_ar: ["كيفاش تتصل بينا","الموقع","كيفاش نتسجل؟"] },
    { patterns_fr: ["comment faire","procédure","dossier","documents","s'inscrire","inscription"], patterns_ar: ["كيفاش نتسجل","كيف نتسجل","تسجيل","أسجل","سجل","وثائق","ملف","كيفاش"], answer_fr: "📝 Comment s'inscrire :\n\n1. Appelez-nous pour vérifier les places disponibles\n2. Préparez votre dossier :\n   • Photocopie CIN ou carnet scolaire\n   • Dernier diplôme ou bulletin de notes\n   • 2 à 4 photos d'identité\n   • Certificat de résidence (selon le cas)\n3. Remplissez le formulaire au centre\n4. Effectuez le règlement des frais\n\n📍 228 rue 20 Mars, Im Gam, Msaken\n📱 +216 73 265 459\n📱 +216 98 275 612", answer_ar: "📝 كيفاش تتسجل في CPN مساكن :\n\n1. اتصل بينا باش تعرف إذا كاين مكان\n2. جهّز ملفك :\n   • نسخة بطاقة هوية أو كراس مدرسي\n   • آخر شهادة أو كشف نقاط\n   • 2 إلى 4 صور\n   • شهادة إقامة (حسب الحالة)\n3. عمّر استمارة التسجيل في المركز\n4. ادفع المعاليم (أو أول قسط)\n\n📍 228 شارع 20 مارس، إيم قام، 4070 مساكن\n📞 +216 73 265 459", suggestions_fr: ["Frais de formation","Dates d'inscription","Localisation"], suggestions_ar: ["السعر","مواعيد التسجيل","الموقع"] },
    { patterns_fr: ["où","adresse","situé","localisation","trouver","plan","emplacement"], patterns_ar: ["وين","فين","أين","عنوان","مكان","موقع","كيفاش نجي","اتجاه"], answer_fr: "📍 Localisation :\n\n🏢 228 rue 20 Mars, Im Gam, 4070 Msaken, Sousse\n\nFacilement accessible depuis le centre de Msaken.\n📱 +216 73 265 459\n📱 +216 98 275 612 pour un itinéraire précis.", answer_ar: "📍 الموقع :\n\n🏢 228 شارع 20 مارس، إيم قام، 4070 مساكن، سوسة\n\nقريب من وسط مساكن، سهل التنقل إليه.\n📱 +216 73 265 459\n📱 +216 98 275 612 للمساعدة في الوصول.", suggestions_fr: ["Contacter le centre","Horaires d'ouverture","Comment s'inscrire ?"], suggestions_ar: ["كيفاش تتصل بينا","أوقات الفتح","كيفاش نتسجل؟"] },
    { patterns_fr: ["contact","appel","téléphone","email","joindre","whatsapp","numéro"], patterns_ar: ["اتصل","اتصال","تلفون","رقم","هاتف","إيميل","واتساب","ايميل","رقم الهاتف"], answer_fr: "📞 Nous contacter :\n\n📱 +216 73 265 459\n📱 +216 98 275 612\n📧 Centre.cpn@gmail.com\n📍 228 rue 20 Mars, Im Gam, Msaken\n⏰ Lun-Ven 8h-18h | Sam 9h-13h", answer_ar: "📞 كيفاش تتصل بينا :\n\n📱 +216 73 265 459\n📱 +216 98 275 612\n📧 Centre.cpn@gmail.com\n📍 228 شارع 20 مارس، إيم قام، مساكن\n⏰ الإثنين-الجمعة 8h-18h | السبت 9h-13h", suggestions_fr: ["Localisation","Horaires d'ouverture","Comment s'inscrire ?"], suggestions_ar: ["الموقع","أوقات الفتح","كيفاش نتسجل؟"] },
    { patterns_fr: ["certif","diplôme","attestation","icdl","reconnu","officiel","valide"], patterns_ar: ["شهادة","دبلوم","اعتراف","ICDL","رسمي","دولي","معترف"], answer_fr: "🏆 Certifications et diplômes :\n\n✅ Diplômes d'État : BTP, BTS, CAPI, CFF, ATBIG, ATMI, TMI\n✅ Certification internationale : ICDL (100+ pays)\n✅ Attestations : pour toutes les formations courtes", answer_ar: "🏆 الشهادات والدبلومات :\n\n✅ شهادات رسمية دولة : BTP، BTS، CAPI، CFF، ATBIG، ATMI، TMI\n✅ شهادة دولية : ICDL (معترف بها في 100+ دولة)\n✅ شهادات حضور : لكل التكوينات القصيرة", suggestions_fr: ["Quelles spécialités ?","Durée des formations","Comment s'inscrire ?"], suggestions_ar: ["التخصصات","مدة التكوين","كيفاش نتسجل؟"] },
    { patterns_fr: ["langue","anglais","français","allemand","fle","parler"], patterns_ar: ["لغة","لغات","إنجليزي","فرنسي","ألماني","انجليزي","فرنسي"], answer_fr: "🌍 Formations en langues :\n\n🇬🇧 Anglais : tous niveaux\n🇫🇷 Français FLE : pour non-francophones\n🇩🇪 Allemand : initiation et intermédiaire\n\nSessions courtes disponibles, idéal pour professionnels et étudiants.", answer_ar: "🌍 تكوينات اللغات :\n\n🇬🇧 إنجليزية : كل المستويات\n🇫🇷 فرنسية FLE : للناطقين بغير الفرنسية\n🇩🇪 ألمانية : مستوى مبتدئ ومتوسط\n\nدورات قصيرة متاحة، مناسبة للعاملين والطلبة.", suggestions_fr: ["Durée des formations","Frais de formation","Comment s'inscrire ?"], suggestions_ar: ["مدة التكوين","السعر","كيفاش نتسجل؟"] },
    { patterns_fr: ["formateur","professeur","enseignant","équipe","staff","encadrant"], patterns_ar: ["مكوّن","أستاذ","مدرب","فريق","مدرس","من يدرس","مين يعلم"], answer_fr: "👨‍🏫 Les formateurs du CPN :\n\nÉquipe qualifiée et expérimentée :\n• Spécialistes informatique et multimédia\n• Experts comptables certifiés\n• Professeurs de langues diplômés\n• Techniciens BTP\n\nVenez nous rencontrer au centre !", answer_ar: "👨‍🏫 مكوّنو مركز CPN :\n\nفريق مؤهل وذو خبرة :\n• متخصصون في الإعلامية والوسائط\n• خبراء محاسبة ومعتمدون\n• أساتذة لغات مؤهلون\n• تقنيو بناء وهندسة مدنية\n\nزور المركز وتعرّف على الفريق! 😊", suggestions_fr: ["Quelles spécialités ?","Contacter le centre","Comment s'inscrire ?"], suggestions_ar: ["التخصصات","كيفاش تتصل بينا","كيفاش نتسجل؟"] },
    { patterns_fr: ["ordinateur","pc","matériel","équipement","apporter","laptop"], patterns_ar: ["حاسوب","كمبيوتر","لابتوب","جهاز","عتاد","نجيب"], answer_fr: "💻 Besoin d'un ordinateur personnel ?\n\n✅ Non ! Le centre dispose de salles informatiques équipées.\n🏠 Avoir un PC à la maison est un plus pour pratiquer, mais pas obligatoire.\n\nConfirmez à l'inscription si vous souhaitez apporter votre laptop.", answer_ar: "💻 محتاج حاسوب شخصي ؟\n\n✅ لا ! المركز عنده قاعات كمبيوتر مجهّزة للطلبة.\n🏠 عندك حاسوب في الدار هو إضافة للمراجعة، أما مش إلزامي.\n\nإذا حبيت تجيب لابتوبك، هذا ممكن — اسأل عند التسجيل.", suggestions_fr: ["Comment s'inscrire ?","Quelles spécialités ?","Contacter le centre"], suggestions_ar: ["كيفاش نتسجل؟","التخصصات","كيفاش تتصل بينا"] },
    { patterns_fr: ["merci","thank","bonne journée","au revoir","bye"], patterns_ar: ["شكرا","بارك الله","يعطيك الصحة","يسلمو","مع السلامة","باي","مشكور"], answer_fr: "🙏 Avec plaisir ! Bonne continuation et à bientôt au CPN Msaken ! 😊", answer_ar: "🙏 العفو ! يسعدنا نخدموا معك. نشوفك قريب في CPN مساكن! 😊", suggestions_fr: ["Autres questions","Contacter le centre"], suggestions_ar: ["أسئلة أخرى","كيفاش تتصل بينا"] }
];

const FALLBACK = { fr: "Je n'ai pas bien compris. Je peux vous aider sur :\n• Formations et spécialités\n• Niveaux requis et inscriptions\n• Frais, durées, horaires\n• Localisation et contacts\n\n📞 +216 73 265 459\n📧 Centre.cpn@gmail.com", ar: "ما فهمتش مليح 😅 نقدر نعاونك في :\n• التكوينات والتخصصات\n• المستوى المطلوب والتسجيل\n• السعر، المدة، أوقات العمل\n• الموقع وطريقة الاتصال\n\n📞 +216 73 265 459\n📧 Centre.cpn@gmail.com" };
const WELCOME = { fr: "👋 Bonjour et bienvenue au CPN Msaken !\nJe suis votre assistant — je réponds en français et en arabe.\n\nQue souhaitez-vous savoir ?", ar: "👋 أهلاً وسهلاً بك في CPN مساكن!\nأنا مساعدك — نجاوب بالعربية والفرنسية 😊\n\nاسأل براحتك!" };
const WELCOME_SUGGESTIONS = { fr: ["Quelles formations ?","Comment s'inscrire ?","Niveaux requis","Frais de formation","Contacter le centre"], ar: ["شنوّا التكوينات؟","كيفاش نتسجل؟","المستوى المطلوب","السعر والمدة","كيفاش تتصل بينا"] };

function findAnswer(question) {
    const lang = detectLang(question);
    const q = normalize(question);
    for (const entry of KB) {
        const patterns = lang === 'ar' ? entry.patterns_ar : entry.patterns_fr;
        if (patterns && patterns.some(p => q.includes(normalize(p)))) {
            return { answer: lang === 'ar' ? entry.answer_ar : entry.answer_fr, suggestions: lang === 'ar' ? entry.suggestions_ar : entry.suggestions_fr, lang };
        }
    }
    for (const entry of KB) {
        const patternsAlt = lang === 'ar' ? entry.patterns_fr : entry.patterns_ar;
        if (patternsAlt && patternsAlt.some(p => q.includes(normalize(p)))) {
            return { answer: lang === 'ar' ? entry.answer_ar : entry.answer_fr, suggestions: lang === 'ar' ? entry.suggestions_ar : entry.suggestions_fr, lang };
        }
    }
    return { answer: FALLBACK[lang], suggestions: WELCOME_SUGGESTIONS[lang], lang };
}

function addMessage(text, sender, suggestions, lang) {
    const div = document.createElement('div');
    div.classList.add('message', sender === 'user' ? 'user-message' : 'bot-message');
    if (lang === 'ar') { div.style.direction = 'rtl'; div.style.textAlign = 'right'; div.style.fontFamily = 'Tahoma, Arial, sans-serif'; }
    div.innerHTML = text.replace(/\n/g, '<br>');
    if (suggestions && suggestions.length > 0) {
        const sugBox = document.createElement('div');
        sugBox.classList.add('suggestions-box');
        if (lang === 'ar') sugBox.style.direction = 'rtl';
        suggestions.forEach(sug => {
            const btn = document.createElement('button');
            btn.classList.add('suggestion-btn');
            btn.textContent = sug;
            btn.addEventListener('click', () => handleUserMessage(sug));
            sugBox.appendChild(btn);
        });
        div.appendChild(sugBox);
    }
    if (chatMessages) chatMessages.appendChild(div);
    if (chatMessages) chatMessages.scrollTop = chatMessages.scrollHeight;
}

function showTyping() {
    const div = document.createElement('div');
    div.classList.add('message', 'bot-message');
    div.id = 'typingIndicator';
    div.innerHTML = '<div class="typing"><span></span><span></span><span></span></div>';
    if (chatMessages) chatMessages.appendChild(div);
    if (chatMessages) chatMessages.scrollTop = chatMessages.scrollHeight;
}
function removeTyping() { const el = document.getElementById('typingIndicator'); if (el) el.remove(); }

function handleUserMessage(msg) {
    if (!msg || !msg.trim() || isWaiting) return;
    isWaiting = true;
    const lang = detectLang(msg);
    addMessage(msg, 'user', [], lang);
    if (chatInput) chatInput.value = '';
    showTyping();
    setTimeout(() => {
        removeTyping();
        const result = findAnswer(msg);
        addMessage(result.answer, 'bot', result.suggestions, result.lang);
        isWaiting = false;
    }, 500 + Math.random() * 300);
}

if (sendChatBtn) {
    sendChatBtn.addEventListener('click', () => handleUserMessage(chatInput ? chatInput.value.trim() : ''));
}
if (chatInput) {
    chatInput.addEventListener('keypress', e => { if (e.key === 'Enter' && !isWaiting) handleUserMessage(chatInput.value.trim()); });
}
if (chatbotBtn && chatbotPanel) {
    chatbotBtn.addEventListener('click', () => { 
        const visible = chatbotPanel.style.display === 'flex'; 
        chatbotPanel.style.display = visible ? 'none' : 'flex'; 
        if (!visible && chatInput) chatInput.focus(); 
    });
}

// ==================== CHARGEMENT DES ÉVÉNEMENTS ====================
async function loadEvents() {
    try {
        const response = await fetch('api_get_events.php');
        const data = await response.json();
        
        if (data.success && data.events && data.events.length > 0) {
            displayEvents(data.events);
        } else {
            const container = document.getElementById('evenements-original');
            if (container) {
                container.innerHTML = '<div class="no-events"><p>Aucun événement programmé pour le moment</p></div>';
            }
        }
    } catch (error) {
        console.error('Erreur chargement événements:', error);
    }
}

function displayEvents(events) {
    const container = document.getElementById('evenements-original');
    if (!container) return;
    
    let html = '<div class="events-grid">';
    events.forEach(event => {
        html += `
            <div class="event-card">
                ${event.image ? `<img src="uploads/events/${event.image}" class="event-img" alt="${escapeHtml(event.titre)}">` : '<div class="event-img-placeholder">📅</div>'}
                <div class="event-info">
                    <h4>${escapeHtml(event.titre)}</h4>
                    <p class="event-date">📅 ${event.date_debut_formatee || event.date_debut}</p>
                    ${event.lieu ? `<p class="event-lieu">📍 ${escapeHtml(event.lieu)}</p>` : ''}
                    <p class="event-desc">${escapeHtml(event.description ? event.description.substring(0, 100) : '')}</p>
                </div>
            </div>
        `;
    });
    html += '</div>';
    container.innerHTML = html;
}

// ==================== FONCTIONS UTILITAIRES ====================
function escapeHtml(text) {
    if (!text) return '';
    const div = document.createElement('div');
    div.textContent = text;
    return div.innerHTML;
}

// ==================== INITIALISATION ====================
window.addEventListener('load', () => {
    genererOnglets();
    chargerFormationsSelect();
    loadEvents();
    
    if (chatMessages) {
        addMessage(WELCOME.fr, 'bot', WELCOME_SUGGESTIONS.fr, 'fr');
        setTimeout(() => { addMessage(WELCOME.ar, 'bot', WELCOME_SUGGESTIONS.ar, 'ar'); }, 800);
    }
});
