class MainApplication { constructor() { this.projects = []; this.currentProject = null; this.init(); } init() { this.loadProjects(); this.setupEventListeners(); this.setupDragAndDrop(); this.updateUI(); this.setupRealTimeUpdates(); } loadProjects() { try { const saved = localStorage.getItem('projects'); this.projects = saved ? JSON.parse(saved) : []; } catch (error) { console.error('Erreur chargement projets:', error); this.projects = []; } } saveProjects() { localStorage.setItem('projects', JSON.stringify(this.projects)); localStorage.setItem('hasUnsavedChanges', 'true'); } setupEventListeners() { // Nouveau projet document.getElementById('new-project')?.addEventListener('click', () => { this.showNewProjectModal(); }); // Création de projet document.getElementById('create-project')?.addEventListener('click', () => { this.createProject(); }); document.getElementById('cancel-project')?.addEventListener('click', () => { this.hideNewProjectModal(); }); // Gestion du chat document.getElementById('send-btn')?.addEventListener('click', () => { this.sendChatMessage(); }); document.getElementById('chat-input')?.addEventListener('keypress', (e) => { if (e.key === 'Enter') { this.sendChatMessage(); } }); // Export/Import document.getElementById('export-data')?.addEventListener('click', () => { this.exportData(); }); document.getElementById('import-data')?.addEventListener('click', () => { this.importData(); }); // Paramètres document.getElementById('settings')?.addEventListener('click', () => { this.showSettings(); }); // Gestion des paramètres de protection const protectionSettings = ['auto-backup', 'prevent-reset', 'encrypt-data', 'cloud-backup']; protectionSettings.forEach(setting => { document.getElementById(setting)?.addEventListener('change', (e) => { this.saveSetting(setting, e.target.checked); }); }); } showNewProjectModal() { const modal = document.getElementById('new-project-modal'); modal.classList.remove('hidden'); document.getElementById('project-name').focus(); } hideNewProjectModal() { const modal = document.getElementById('new-project-modal'); modal.classList.add('hidden'); document.getElementById('project-name').value = ''; } createProject() { const name = document.getElementById('project-name').value.trim(); const type = document.getElementById('project-type').value; if (!name) { this.showNotification('Veuillez entrer un nom pour le projet', 'error'); return; } const project = { id: Date.now().toString(), name: name, type: type, createdAt: new Date().toISOString(), updatedAt: new Date().toISOString(), files: [], protected: true }; this.projects.push(project); this.saveProjects(); this.updateProjectsList(); this.hideNewProjectModal(); this.showNotification(`Projet "${name}" créé avec succès!`, 'success'); // Ajouter un message dans le chat this.addAIMessage(`Nouveau projet créé: ${name}. Je vais vous aider à le développer.`); } updateProjectsList() { const listElement = document.getElementById('projects-list'); if (!listElement) return; listElement.innerHTML = ''; this.projects.forEach(project => { const projectElement = document.createElement('div'); projectElement.className = 'project-item'; projectElement.innerHTML = `
${project.name}
${project.type} ${new Date(project.createdAt).toLocaleDateString()}
`; listElement.appendChild(projectElement); }); // Ajouter des styles pour les actions const style = document.createElement('style'); style.textContent = ` .project-meta { display: flex; justify-content: space-between; margin-top: 5px; font-size: 12px; } .project-actions { display: flex; gap: 5px; margin-top: 10px; } .project-action-btn { background: rgba(255, 255, 255, 0.1); border: none; width: 30px; height: 30px; border-radius: 5px; color: white; cursor: pointer; display: flex; align-items: center; justify-content: center; } .project-action-btn:hover { background: var(--accent-color); } `; if (!document.querySelector('#project-actions-style')) { style.id = 'project-actions-style'; document.head.appendChild(style); } } openProject(projectId) { const project = this.projects.find(p => p.id === projectId); if (project) { this.currentProject = project; this.addAIMessage(`Ouverture du projet: ${project.name}. Prêt à travailler!`); this.showNotification(`Projet "${project.name}" ouvert`, 'info'); } } deleteProject(projectId) { if (confirm('Êtes-vous sûr de vouloir supprimer ce projet? Cette action ne peut pas être annulée.')) { this.projects = this.projects.filter(p => p.id !== projectId); this.saveProjects(); this.updateProjectsList(); this.showNotification('Projet supprimé', 'info'); } } sendChatMessage() { const input = document.getElementById('chat-input'); const message = input.value.trim(); if (!message) return; // Ajouter le message de l'utilisateur this.addUserMessage(message); input.value = ''; // Simuler une réponse de l'IA setTimeout(() => { this.generateAIResponse(message); }, 1000); } addUserMessage(message) { const chatMessages = document.getElementById('chat-messages'); const messageDiv = document.createElement('div'); messageDiv.className = 'message user-message'; messageDiv.innerHTML = `
${message}
${new Date().toLocaleTimeString([], {hour: '2-digit', minute:'2-digit'})}
`; chatMessages.appendChild(messageDiv); chatMessages.scrollTop = chatMessages.scrollHeight; } addAIMessage(message) { const chatMessages = document.getElementById('chat-messages'); const messageDiv = document.createElement('div'); messageDiv.className = 'message ai-message'; messageDiv.innerHTML = `
${message}
${new Date().toLocaleTimeString([], {hour: '2-digit', minute:'2-digit'})}
`; chatMessages.appendChild(messageDiv); chatMessages.scrollTop = chatMessages.scrollHeight; } generateAIResponse(userMessage) { const responses = { 'bonjour': 'Bonjour! Comment puis-je vous aider avec votre entreprise aujourd\'hui?', 'aide': 'Je peux vous aider à: créer des projets, générer des images/vidéos, protéger vos données, et bien plus encore. Dites-moi ce dont vous avez besoin!', 'merci': 'Avec plaisir! N\'hésitez pas si vous avez d\'autres questions.', 'sauve