import React, { useState } from 'react'; import { Calendar, CheckCircle, Clock, FileText, Grid, Home, LayoutDashboard, List, MessageSquare, PieChart, Plus, Settings, Users, Bell, ChevronRight, ChevronLeft, Instagram, Twitter, Search, Menu, X, Filter, MoreHorizontal, Edit, Trash, Eye, Upload, Download, ArrowUp, ArrowDown, CheckSquare, Square, ChevronDown, ChevronUp, Paperclip, Link, Share, User, LogOut, Moon, Sun, Globe, Lock, Mail, Phone, MapPin, AlertCircle, HelpCircle, Info, Briefcase, Image, Video, FileImage, FilePlus, FolderPlus, Folder, Star, StarHalf, BarChart2, PieChart as PieChartIcon, LineChart, TrendingUp, TrendingDown, ArrowUpRight, ArrowDownRight, Slash, XCircle, CheckCircle as CheckCircleIcon, AlertTriangle, Save, RefreshCw, ExternalLink, Clipboard, Copy } from 'lucide-react'; // Main App Component const MontagecoApp = () => { const [language, setLanguage] = useState('ar'); // 'ar' for Arabic, 'en' for English const [menuOpen, setMenuOpen] = useState(false); const [currentPage, setCurrentPage] = useState('dashboard'); const [modalOpen, setModalOpen] = useState(false); const [modalType, setModalType] = useState(''); const [modalData, setModalData] = useState(null); const [darkMode, setDarkMode] = useState(false); // Translations const translations = { en: { // General dashboard: "Dashboard", projects: "Projects", tasks: "Tasks", assets: "Assets", contentPlan: "Content Plan", clients: "Clients", team: "Team", reports: "Reports", settings: "Settings", messages: "Messages", search: "Search...", welcome: "Welcome back", notifications: "Notifications", viewAll: "View All", today: "Today", thisWeek: "This Week", add: "Add", edit: "Edit", delete: "Delete", view: "View", save: "Save", cancel: "Cancel", close: "Close", filter: "Filter", sort: "Sort", status: "Status", priority: "Priority", dueDate: "Due Date", assignedTo: "Assigned To", createdBy: "Created By", createdAt: "Created At", updatedAt: "Updated At", actions: "Actions", name: "Name", description: "Description", type: "Type", size: "Size", date: "Date", platform: "Platform", role: "Role", email: "Email", phone: "Phone", address: "Address", company: "Company", website: "Website", noProjectsFound: "No projects found", noTasksFound: "No tasks found", noFilesFound: "No files found", noContentFound: "No content found", noClientsFound: "No clients found", noTeamMembersFound: "No team members found", // Projects projectsOverview: "Projects Overview", activeProjects: "Active Projects", completedProjects: "Completed Projects", pendingProjects: "Pending Projects", archivedProjects: "Archived Projects", newProject: "New Project", projectName: "Project Name", projectDescription: "Project Description", projectStatus: "Project Status", projectBudget: "Project Budget", projectDeadline: "Project Deadline", projectClient: "Project Client", projectManager: "Project Manager", projectTeam: "Project Team", projectProgress: "Project Progress", projectDetails: "Project Details", // Tasks upcomingTasks: "Upcoming Tasks", completedTasks: "Completed Tasks", myTasks: "My Tasks", allTasks: "All Tasks", newTask: "New Task", taskName: "Task Name", taskDescription: "Task Description", taskStatus: "Task Status", taskPriority: "Task Priority", taskDueDate: "Task Due Date", taskProject: "Related Project", taskAssignee: "Assignee", taskDetails: "Task Details", // Assets recentFiles: "Recent Files", allFiles: "All Files", uploadFile: "Upload File", fileName: "File Name", fileType: "File Type", fileSize: "File Size", fileUploadDate: "Upload Date", fileDetails: "File Details", designs: "Designs", documents: "Documents", images: "Images", // Content Plan contentCalendar: "Content Calendar", scheduledContent: "Scheduled Content", publishedContent: "Published Content", newContent: "New Content", contentTitle: "Content Title", contentDescription: "Content Description", contentPlatform: "Platform", contentPublishDate: "Publish Date", contentStatus: "Content Status", contentProject: "Related Project", contentDetails: "Content Details", all: "All", // Clients clientsList: "Clients List", newClient: "New Client", clientName: "Client Name", clientEmail: "Client Email", clientPhone: "Client Phone", clientCompany: "Client Company", clientAddress: "Client Address", clientWebsite: "Client Website", clientProjects: "Client Projects", clientDetails: "Client Details", // Team teamMembers: "Team Members", teamPerformance: "Team Performance", newTeamMember: "New Team Member", memberName: "Member Name", memberEmail: "Member Email", memberPhone: "Member Phone", memberRole: "Member Role", memberProjects: "Member Projects", memberTasks: "Member Tasks", memberPerformance: "Member Performance", memberDetails: "Member Details", // Reports performanceReports: "Performance Reports", projectReports: "Project Reports", teamReports: "Team Reports", clientReports: "Client Reports", financialReports: "Financial Reports", generateReport: "Generate Report", reportType: "Report Type", reportPeriod: "Report Period", reportFormat: "Report Format", // Settings generalSettings: "General Settings", accountSettings: "Account Settings", notificationSettings: "Notification Settings", securitySettings: "Security Settings", languageSettings: "Language Settings", themeSettings: "Theme Settings", roleSettings: "Role Settings", // Status active: "Active", inactive: "Inactive", pending: "Pending", inProgress: "In Progress", completed: "Completed", cancelled: "Cancelled", archived: "Archived", scheduled: "Scheduled", published: "Published", // Priority high: "High", medium: "Medium", low: "Low", // Months january: "January", february: "February", march: "March", april: "April", may: "May", june: "June", july: "July", august: "August", september: "September", october: "October", november: "November", december: "December", // Social Media instagram: "Instagram", twitter: "Twitter", tiktok: "TikTok", googleMaps: "Google Maps", // Task Types designTask: "Design Task", editTask: "Edit Task", designReview: "Design Review", clientFeedback: "Client Feedback", finalApproval: "Final Approval", // Roles owner: "Owner", projectManager: "Project Manager", projectSupervisor: "Project Supervisor", designManager: "Design Manager", designer: "Designer", client: "Client", // Notifications newTaskAssigned: "New task assigned", taskStatusChanged: "Task status changed", projectDeadlineApproaching: "Project deadline approaching", clientCommentAdded: "Client added a comment", designApproved: "Design approved", // Misc darkMode: "Dark Mode", lightMode: "Light Mode", logout: "Logout", profile: "Profile", help: "Help", support: "Support", termsOfService: "Terms of Service", privacyPolicy: "Privacy Policy", }, ar: { // General dashboard: "لوحة التحكم", projects: "المشاريع", tasks: "المهام", assets: "الأصول", contentPlan: "خطة المحتوى", clients: "العملاء", team: "الفريق", reports: "التقارير", settings: "الإعدادات", messages: "الرسائل", search: "بحث...", welcome: "مرحباً بعودتك", notifications: "الإشعارات", viewAll: "عرض الكل", today: "اليوم", thisWeek: "هذا الأسبوع", add: "إضافة", edit: "تعديل", delete: "حذف", view: "عرض", save: "حفظ", cancel: "إلغاء", close: "إغلاق", filter: "تصفية", sort: "ترتيب", status: "الحالة", priority: "الأولوية", dueDate: "تاريخ الاستحقاق", assignedTo: "مُسند إلى", createdBy: "أنشئ بواسطة", createdAt: "تاريخ الإنشاء", updatedAt: "تاريخ التحديث", actions: "إجراءات", name: "الاسم", description: "الوصف", type: "النوع", size: "الحجم", date: "التاريخ", platform: "المنصة", role: "الدور", email: "البريد الإلكتروني", phone: "الهاتف", address: "العنوان", company: "الشركة", website: "الموقع الإلكتروني", noProjectsFound: "لم يتم العثور على مشاريع", noTasksFound: "لم يتم العثور على مهام", noFilesFound: "لم يتم العثور على ملفات", noContentFound: "لم يتم العثور على محتوى", noClientsFound: "لم يتم العثور على عملاء", noTeamMembersFound: "لم يتم العثور على أعضاء فريق", // Projects projectsOverview: "نظرة عامة على المشاريع", activeProjects: "المشاريع النشطة", completedProjects: "المشاريع المكتملة", pendingProjects: "المشاريع قيد الانتظار", archivedProjects: "المشاريع المؤرشفة", newProject: "مشروع جديد", projectName: "اسم المشروع", projectDescription: "وصف المشروع", projectStatus: "حالة المشروع", projectBudget: "ميزانية المشروع", projectDeadline: "الموعد النهائي للمشروع", projectClient: "عميل المشروع", projectManager: "مدير المشروع", projectTeam: "فريق المشروع", projectProgress: "تقدم المشروع", projectDetails: "تفاصيل المشروع", // Tasks upcomingTasks: "المهام القادمة", completedTasks: "المهام المكتملة", myTasks: "مهامي", allTasks: "جميع المهام", newTask: "مهمة جديدة", taskName: "اسم المهمة", taskDescription: "وصف المهمة", taskStatus: "حالة المهمة", taskPriority: "أولوية المهمة", taskDueDate: "تاريخ استحقاق المهمة", taskProject: "المشروع المرتبط", taskAssignee: "المسؤول", taskDetails: "تفاصيل المهمة", // Assets recentFiles: "الملفات الحديثة", allFiles: "جميع الملفات", uploadFile: "رفع ملف", fileName: "اسم الملف", fileType: "نوع الملف", fileSize: "حجم الملف", fileUploadDate: "تاريخ الرفع", fileDetails: "تفاصيل الملف", designs: "التصاميم", documents: "المستندات", images: "الصور", // Content Plan contentCalendar: "تقويم المحتوى", scheduledContent: "المحتوى المجدول", publishedContent: "المحتوى المنشور", newContent: "محتوى جديد", contentTitle: "عنوان المحتوى", contentDescription: "وصف المحتوى", contentPlatform: "المنصة", contentPublishDate: "تاريخ النشر", contentStatus: "حالة المحتوى", contentProject: "المشروع المرتبط", contentDetails: "تفاصيل المحتوى", all: "الكل", // Clients clientsList: "قائمة العملاء", newClient: "عميل جديد", clientName: "اسم العميل", clientEmail: "البريد الإلكتروني للعميل", clientPhone: "هاتف العميل", clientCompany: "شركة العميل", clientAddress: "عنوان العميل", clientWebsite: "موقع العميل الإلكتروني", clientProjects: "مشاريع العميل", clientDetails: "تفاصيل العميل", // Team teamMembers: "أعضاء الفريق", teamPerformance: "أداء الفريق", newTeamMember: "عضو فريق جديد", memberName: "اسم العضو", memberEmail: "البريد الإلكتروني للعضو", memberPhone: "هاتف العضو", memberRole: "دور العضو", memberProjects: "مشاريع العضو", memberTasks: "مهام العضو", memberPerformance: "أداء العضو", memberDetails: "تفاصيل العضو", // Reports performanceReports: "تقارير الأداء", projectReports: "تقارير المشاريع", teamReports: "تقارير الفريق", clientReports: "تقارير العملاء", financialReports: "التقارير المالية", generateReport: "إنشاء تقرير", reportType: "نوع التقرير", reportPeriod: "فترة التقرير", reportFormat: "تنسيق التقرير", // Settings generalSettings: "الإعدادات العامة", accountSettings: "إعدادات الحساب", notificationSettings: "إعدادات الإشعارات", securitySettings: "إعدادات الأمان", languageSettings: "إعدادات اللغة", themeSettings: "إعدادات المظهر", roleSettings: "إعدادات الأدوار", // Status active: "نشط", inactive: "غير نشط", pending: "قيد الانتظار", inProgress: "قيد التنفيذ", completed: "مكتمل", cancelled: "ملغي", archived: "مؤرشف", scheduled: "مجدول", published: "منشور", // Priority high: "عالية", medium: "متوسطة", low: "منخفضة", // Months january: "يناير", february: "فبراير", march: "مارس", april: "أبريل", may: "مايو", june: "يونيو", july: "يوليو", august: "أغسطس", september: "سبتمبر", october: "أكتوبر", november: "نوفمبر", december: "ديسمبر", // Social Media instagram: "انستغرام", twitter: "تويتر", tiktok: "تيك توك", googleMaps: "خرائط جوجل", // Task Types designTask: "مهمة تصميم", editTask: "مهمة تعديل", designReview: "مراجعة تصميم", clientFeedback: "ملاحظات العميل", finalApproval: "الموافقة النهائية", // Roles owner: "مالك", projectManager: "مدير مشروع", projectSupervisor: "مشرف مشروع", designManager: "مدير تصميم", designer: "مصمم", client: "عميل", // Notifications newTaskAssigned: "تم تعيين مهمة جديدة لك", taskStatusChanged: "تم تغيير حالة المهمة", projectDeadlineApproaching: "موعد تسليم المشروع يقترب", clientCommentAdded: "أضاف العميل تعليقًا جديدًا", designApproved: "تمت الموافقة على التصميم", // Misc darkMode: "الوضع الداكن", lightMode: "الوضع الفاتح", logout: "تسجيل الخروج", profile: "الملف الشخصي", help: "المساعدة", support: "الدعم", termsOfService: "شروط الخدمة", privacyPolicy: "سياسة الخصوصية", } }; // Helper function to get text based on current language const t = (key) => translations[language][key] || key; // Mock data for projects const projectsData = [ { id: 1, name: 'Brand X Rebranding', client: 'Brand X Corp', status: 'active', progress: 75, deadline: '2023-12-25', budget: '$5,000', manager: 'محمد أحمد' }, { id: 2, name: 'Tech Co Website', client: 'Tech Co', status: 'active', progress: 45, deadline: '2024-01-15', budget: '$8,500', manager: 'سارة خالد' }, { id: 3, name: 'Fashion Z Campaign', client: 'Fashion Z', status: 'pending', progress: 10, deadline: '2024-01-30', budget: '$12,000', manager: 'أحمد علي' }, { id: 4, name: 'Cafe Y Menu Design', client: 'Cafe Y', status: 'completed', progress: 100, deadline: '2023-12-05', budget: '$1,800', manager: 'ليلى محمد' }, { id: 5, name: 'Hotel Z Brochure', client: 'Hotel Z', status: 'archived', progress: 100, deadline: '2023-11-20', budget: '$3,200', manager: 'محمد أحمد' }, { id: 6, name: 'Restaurant A Menu', client: 'Restaurant A', status: 'active', progress: 60, deadline: '2023-12-30', budget: '$2,500', manager: 'سارة خالد' }, { id: 7, name: 'Gym B Social Media', client: 'Gym B', status: 'active', progress: 35, deadline: '2024-01-10', budget: '$4,800', manager: 'أحمد علي' }, { id: 8, name: 'Clinic C Website', client: 'Clinic C', status: 'pending', progress: 5, deadline: '2024-02-15', budget: '$7,500', manager: 'ليلى محمد' }, ]; // Mock data for tasks const tasksData = [ { id: 1, name: t('designTask'), project: 'Brand X Rebranding', dueDate: '2023-12-15', assignedTo: 'محمد أحمد', priority: 'high', status: 'inProgress' }, { id: 2, name: t('editTask'), project: 'Tech Co Website', dueDate: '2023-12-16', assignedTo: 'سارة خالد', priority: 'medium', status: 'pending' }, { id: 3, name: t('designReview'), project: 'Fashion Z Campaign', dueDate: '2023-12-14', assignedTo: 'أحمد علي', priority: 'high', status: 'pending' }, { id: 4, name: t('clientFeedback'), project: 'Cafe Y Menu Design', dueDate: '2023-12-13', assignedTo: 'ليلى محمد', priority: 'low', status: 'completed' }, { id: 5, name: t('finalApproval'), project: 'Hotel Z Brochure', dueDate: '2023-12-12', assignedTo: 'محمد أحمد', priority: 'medium', status: 'completed' }, { id: 6, name: t('designTask'), project: 'Restaurant A Menu', dueDate: '2023-12-18', assignedTo: 'سارة خالد', priority: 'high', status: 'inProgress' }, { id: 7, name: t('editTask'), project: 'Gym B Social Media', dueDate: '2023-12-20', assignedTo: 'أحمد علي', priority: 'low', status: 'pending' }, { id: 8, name: t('designReview'), project: 'Clinic C Website', dueDate: '2023-12-22', assignedTo: 'ليلى محمد', priority: 'medium', status: 'inProgress' }, ]; // Mock data for content calendar const contentCalendarData = [ { id: 1, title: 'Brand X New Logo Reveal', platform: 'instagram', date: '2023-12-15', project: 'Brand X Rebranding', status: 'scheduled' }, { id: 2, title: 'Tech Co Product Launch', platform: 'twitter', date: '2023-12-16', project: 'Tech Co Website', status: 'published' }, { id: 3, title: 'Fashion Z Summer Collection', platform: 'tiktok', date: '2023-12-17', project: 'Fashion Z Campaign', status: 'scheduled' }, { id: 4, title: 'Cafe Y New Menu Items', platform: 'instagram', date: '2023-12-18', project: 'Cafe Y Menu Design', status: 'scheduled' }, { id: 5, title: 'Hotel Z Facilities Tour', platform: 'instagram', date: '2023-12-19', project: 'Hotel Z Brochure', status: 'published' }, { id: 6, title: 'Restaurant A Chef Interview', platform: 'twitter', date: '2023-12-20', project: 'Restaurant A Menu', status: 'scheduled' }, { id: 7, title: 'Gym B Workout Tips', platform: 'tiktok', date: '2023-12-21', project: 'Gym B Social Media', status: 'scheduled' }, { id: 8, title: 'Clinic C Health Tips', platform: 'instagram', date: '2023-12-22', project: 'Clinic C Website', status: 'scheduled' }, ]; // Mock data for assets const assetsData = [ { id: 1, name: 'Brand X Logo Final.ai', type: 'design', project: 'Brand X Rebranding', date: '2023-12-12', size: '2.4 MB' }, { id: 2, name: 'Tech Co Social Media Kit.psd', type: 'design', project: 'Tech Co Website', date: '2023-12-11', size: '15.7 MB' }, { id: 3, name: 'Fashion Z Contract.pdf', type: 'document', project: 'Fashion Z Campaign', date: '2023-12-10', size: '1.2 MB' }, { id: 4, name: 'Cafe Y Menu Design.ai', type: 'design', project: 'Cafe Y Menu Design', date: '2023-12-09', size: '4.5 MB' }, { id: 5, name: 'Hotel Z Brochure Draft.pdf', type: 'document', project: 'Hotel Z Brochure', date: '2023-12-08', size: '3.8 MB' }, { id: 6, name: 'Restaurant A Menu Photos.zip', type: 'image', project: 'Restaurant A Menu', date: '2023-12-07', size: '28.2 MB' }, { id: 7, name: 'Gym B Logo Variations.ai', type: 'design', project: 'Gym B Social Media', date: '2023-12-06', size: '5.1 MB' }, { id: 8, name: 'Clinic C Website Wireframes.sketch', type: 'design', project: 'Clinic C Website', date: '2023-12-05', size: '8.7 MB' }, ]; // Mock data for clients const clientsData = [ { id: 1, name: 'Brand X Corp', contact: 'John Smith', email: 'john@brandx.com', phone: '+1 234 567 890', projects: 1 }, { id: 2, name: 'Tech Co', contact: 'Sarah Johnson', email: 'sarah@techco.com', phone: '+1 234 567 891', projects: 1 }, { id: 3, name: 'Fashion Z', contact: 'Michael Brown', email: 'michael@fashionz.com', phone: '+1 234 567 892', projects: 1 }, { id: 4, name: 'Cafe Y', contact: 'Emily Davis', email: 'emily@cafey.com', phone: '+1 234 567 893', projects: 1 }, { id: 5, name: 'Hotel Z', contact: 'David Wilson', email: 'david@hotelz.com', phone: '+1 234 567 894', projects: 1 }, { id: 6, name: 'Restaurant A', contact: 'Jennifer Lee', email: 'jennifer@restauranta.com', phone: '+1 234 567 895', projects: 1 }, { id: 7, name: 'Gym B', contact: 'Robert Taylor', email: 'robert@gymb.com', phone: '+1 234 567 896', projects: 1 }, { id: 8, name: 'Clinic C', contact: 'Lisa Anderson', email: 'lisa@clinicc.com', phone: '+1 234 567 897', projects: 1 }, ]; // Mock data for team members const teamMembersData = [ { id: 1, name: 'محمد أحمد', role: 'projectManager', email: 'mohamed@montageco.com', phone: '+966 50 123 4567', tasksCompleted: 24, onTime: '95%' }, { id: 2, name: 'سارة خالد', role: 'projectManager', email: 'sarah@montageco.com', phone: '+966 50 123 4568', tasksCompleted: 18, onTime: '92%' }, { id: 3, name: 'أحمد علي', role: 'designManager', email: 'ahmed@montageco.com', phone: '+966 50 123 4569', tasksCompleted: 15, onTime: '88%' }, { id: 4, name: 'ليلى محمد', role: 'designer', email: 'layla@montageco.com', phone: '+966 50 123 4570', tasksCompleted: 21, onTime: '94%' }, { id: 5, name: 'خالد عمر', role: 'designer', email: 'khaled@montageco.com', phone: '+966 50 123 4571', tasksCompleted: 19, onTime: '90%' }, { id: 6, name: 'فاطمة علي', role: 'designer', email: 'fatima@montageco.com', phone: '+966 50 123 4572', tasksCompleted: 17, onTime: '89%' }, { id: 7, name: 'عمر حسن', role: 'projectSupervisor', email: 'omar@montageco.com', phone: '+966 50 123 4573', tasksCompleted: 22, onTime: '93%' }, { id: 8, name: 'نورة سعيد', role: 'owner', email: 'noura@montageco.com', phone: '+966 50 123 4574', tasksCompleted: 10, onTime: '97%' }, ]; // Mock data for notifications const notificationsData = [ { id: 1, type: 'task', message: t('newTaskAssigned'), time: '10:30 AM', read: false }, { id: 2, type: 'comment', message: t('clientCommentAdded'), time: '09:15 AM', read: false }, { id: 3, type: 'deadline', message: t('projectDeadlineApproaching'), time: 'Yesterday', read: true }, { id: 4, type: 'approval', message: t('designApproved'), time: 'Yesterday', read: true }, { id: 5, type: 'task', message: t('taskStatusChanged'), time: '2 days ago', read: true }, { id: 6, type: 'comment', message: t('clientCommentAdded'), time: '2 days ago', read: true }, { id: 7, type: 'deadline', message: t('projectDeadlineApproaching'), time: '3 days ago', read: true }, { id: 8, type: 'approval', message: t('designApproved'), time: '3 days ago', read: true }, ]; // Get priority color const getPriorityColor = (priority) => { switch(priority) { case 'high': return 'bg-red-100 text-red-800'; case 'medium': return 'bg-yellow-100 text-yellow-800'; case 'low': return 'bg-green-100 text-green-800'; default: return 'bg-gray-100 text-gray-800'; } }; // Get status color const getStatusColor = (status) => { switch(status) { case 'completed': return 'bg-green-100 text-green-800'; case 'inProgress': return 'bg-blue-100 text-blue-800'; case 'pending': return 'bg-yellow-100 text-yellow-800'; case 'cancelled': return 'bg-red-100 text-red-800'; case 'active': return 'bg-blue-100 text-blue-800'; case 'archived': return 'bg-gray-100 text-gray-800'; case 'published': return 'bg-green-100 text-green-800'; case 'scheduled': return 'bg-yellow-100 text-yellow-800'; default: return 'bg-gray-100 text-gray-800'; } }; // Get platform icon const getPlatformIcon = (platform) => { switch(platform) { case 'instagram': return ; case 'twitter': return ; case 'tiktok': return TT; default: return null; } }; // Get file type icon const getFileTypeIcon = (type) => { switch(type) { case 'design': return ; case 'document': return ; case 'image': return ; case 'video': return