// Demo storage service - simulates backend functionality using localStorage import type { UserProfile, Project, Achievement } from './database.types'; import { aethexToast } from './aethex-toast'; const STORAGE_KEYS = { USER_PROFILE: 'aethex_demo_user_profile', PROJECTS: 'aethex_demo_projects', ACHIEVEMENTS: 'aethex_demo_achievements', NOTIFICATIONS: 'aethex_demo_notifications', INTERESTS: 'aethex_demo_interests', }; // Demo user data const DEMO_USER_PROFILE: Partial = { id: 'demo-user-123', username: 'demo_developer', full_name: 'Demo Developer', user_type: 'game_developer', experience_level: 'intermediate', total_xp: 1250, level: 5, bio: 'Passionate game developer exploring the AeThex ecosystem', location: 'Digital Realm', github_url: 'https://github.com/demo-developer', twitter_url: 'https://twitter.com/demo_dev', created_at: new Date().toISOString(), updated_at: new Date().toISOString(), }; const DEMO_PROJECTS: Project[] = [ { id: 'proj-1', user_id: 'demo-user-123', title: 'Quantum Quest', description: 'A sci-fi adventure game built with AeThex Engine', status: 'in_progress', technologies: ['AeThex Engine', 'TypeScript', 'WebGL'], github_url: 'https://github.com/demo/quantum-quest', demo_url: 'https://quantum-quest-demo.com', image_url: null, start_date: '2024-01-15', end_date: null, created_at: new Date().toISOString(), updated_at: new Date().toISOString(), }, { id: 'proj-2', user_id: 'demo-user-123', title: 'Neon Runner', description: 'Fast-paced endless runner with cyberpunk aesthetics', status: 'completed', technologies: ['AeThex Engine', 'JavaScript', 'CSS3'], github_url: 'https://github.com/demo/neon-runner', demo_url: 'https://neon-runner-demo.com', image_url: null, start_date: '2023-08-01', end_date: '2023-12-15', created_at: new Date().toISOString(), updated_at: new Date().toISOString(), }, { id: 'proj-3', user_id: 'demo-user-123', title: 'Pixel Physics', description: 'Educational physics simulation game', status: 'planning', technologies: ['AeThex Engine', 'React', 'Physics Engine'], github_url: null, demo_url: null, image_url: null, start_date: '2024-03-01', end_date: null, created_at: new Date().toISOString(), updated_at: new Date().toISOString(), }, ]; const DEMO_ACHIEVEMENTS: Achievement[] = [ { id: 'ach-1', name: 'Welcome to AeThex', description: 'Complete your profile setup', icon: '🎉', xp_reward: 100, badge_color: '#10B981', created_at: new Date().toISOString(), }, { id: 'ach-2', name: 'First Project', description: 'Create your first project', icon: '🚀', xp_reward: 150, badge_color: '#3B82F6', created_at: new Date().toISOString(), }, { id: 'ach-3', name: 'Community Contributor', description: 'Make your first community post', icon: '💬', xp_reward: 75, badge_color: '#8B5CF6', created_at: new Date().toISOString(), }, { id: 'ach-4', name: 'Experienced Developer', description: 'Complete 5 projects', icon: '👨‍💻', xp_reward: 300, badge_color: '#EF4444', created_at: new Date().toISOString(), }, ]; export class DemoStorageService { // User Profile Management static getUserProfile(): UserProfile | null { const stored = localStorage.getItem(STORAGE_KEYS.USER_PROFILE); return stored ? JSON.parse(stored) : DEMO_USER_PROFILE; } static updateUserProfile(updates: Partial): UserProfile { const current = this.getUserProfile() || DEMO_USER_PROFILE; const updated = { ...current, ...updates, updated_at: new Date().toISOString() }; localStorage.setItem(STORAGE_KEYS.USER_PROFILE, JSON.stringify(updated)); return updated as UserProfile; } // Projects Management static getUserProjects(): Project[] { const stored = localStorage.getItem(STORAGE_KEYS.PROJECTS); return stored ? JSON.parse(stored) : DEMO_PROJECTS; } static createProject(project: Omit): Project { const projects = this.getUserProjects(); const newProject: Project = { ...project, id: `proj-${Date.now()}`, created_at: new Date().toISOString(), updated_at: new Date().toISOString(), }; projects.unshift(newProject); localStorage.setItem(STORAGE_KEYS.PROJECTS, JSON.stringify(projects)); return newProject; } static updateProject(projectId: string, updates: Partial): Project | null { const projects = this.getUserProjects(); const index = projects.findIndex(p => p.id === projectId); if (index === -1) return null; projects[index] = { ...projects[index], ...updates, updated_at: new Date().toISOString() }; localStorage.setItem(STORAGE_KEYS.PROJECTS, JSON.stringify(projects)); return projects[index]; } static deleteProject(projectId: string): boolean { const projects = this.getUserProjects(); const filtered = projects.filter(p => p.id !== projectId); localStorage.setItem(STORAGE_KEYS.PROJECTS, JSON.stringify(filtered)); return filtered.length < projects.length; } // Achievements Management static getAllAchievements(): Achievement[] { return DEMO_ACHIEVEMENTS; } static getUserAchievements(): Achievement[] { const stored = localStorage.getItem(STORAGE_KEYS.ACHIEVEMENTS); const earnedIds = stored ? JSON.parse(stored) : ['ach-1', 'ach-2', 'ach-3']; return DEMO_ACHIEVEMENTS.filter(ach => earnedIds.includes(ach.id)); } static awardAchievement(achievementId: string): void { const stored = localStorage.getItem(STORAGE_KEYS.ACHIEVEMENTS); const earnedIds = stored ? JSON.parse(stored) : ['ach-1', 'ach-2', 'ach-3']; if (!earnedIds.includes(achievementId)) { earnedIds.push(achievementId); localStorage.setItem(STORAGE_KEYS.ACHIEVEMENTS, JSON.stringify(earnedIds)); const achievement = DEMO_ACHIEVEMENTS.find(a => a.id === achievementId); if (achievement) { aethexToast.aethex({ title: 'Achievement Unlocked!', description: `${achievement.icon} ${achievement.name} - ${achievement.description}`, duration: 8000, }); } } } // Interests Management static getUserInterests(): string[] { const stored = localStorage.getItem(STORAGE_KEYS.INTERESTS); return stored ? JSON.parse(stored) : ['Game Development', 'AI/ML', 'Web3', 'Mobile Apps']; } static updateUserInterests(interests: string[]): void { localStorage.setItem(STORAGE_KEYS.INTERESTS, JSON.stringify(interests)); } // Demo data initialization static initializeDemoData(): void { // Only initialize if no data exists if (!localStorage.getItem(STORAGE_KEYS.USER_PROFILE)) { localStorage.setItem(STORAGE_KEYS.USER_PROFILE, JSON.stringify(DEMO_USER_PROFILE)); } if (!localStorage.getItem(STORAGE_KEYS.PROJECTS)) { localStorage.setItem(STORAGE_KEYS.PROJECTS, JSON.stringify(DEMO_PROJECTS)); } if (!localStorage.getItem(STORAGE_KEYS.ACHIEVEMENTS)) { localStorage.setItem(STORAGE_KEYS.ACHIEVEMENTS, JSON.stringify(['ach-1', 'ach-2', 'ach-3'])); } if (!localStorage.getItem(STORAGE_KEYS.INTERESTS)) { localStorage.setItem(STORAGE_KEYS.INTERESTS, JSON.stringify(['Game Development', 'AI/ML', 'Web3', 'Mobile Apps'])); } } // Clear all demo data static clearDemoData(): void { Object.values(STORAGE_KEYS).forEach(key => { localStorage.removeItem(key); }); } }