import { Routes, Route, Navigate } from 'react-router-dom' import { useState, useEffect, createContext } from 'react' import { AuthProvider, useAuth } from './contexts/AuthContext' import { LanguageProvider } from './i18n/LanguageContext' import { ToastProvider } from './components/ToastContainer' import Layout from './components/Layout' import Dashboard from './pages/Dashboard' import PostProduction from './pages/PostProduction' import Assets from './pages/Assets' import Campaigns from './pages/Campaigns' import CampaignDetail from './pages/CampaignDetail' import Finance from './pages/Finance' import Budgets from './pages/Budgets' import Projects from './pages/Projects' import ProjectDetail from './pages/ProjectDetail' import Tasks from './pages/Tasks' import Team from './pages/Team' import Users from './pages/Users' import Settings from './pages/Settings' import Brands from './pages/Brands' import Login from './pages/Login' import Artefacts from './pages/Artefacts' import PostCalendar from './pages/PostCalendar' import PublicReview from './pages/PublicReview' import Issues from './pages/Issues' import PublicIssueSubmit from './pages/PublicIssueSubmit' import PublicIssueTracker from './pages/PublicIssueTracker' import Tutorial from './components/Tutorial' import Modal from './components/Modal' import { api } from './utils/api' import { useLanguage } from './i18n/LanguageContext' const TEAM_ROLES = [ { value: 'manager', label: 'Manager' }, { value: 'approver', label: 'Approver' }, { value: 'publisher', label: 'Publisher' }, { value: 'content_creator', label: 'Content Creator' }, { value: 'producer', label: 'Producer' }, { value: 'designer', label: 'Designer' }, { value: 'content_writer', label: 'Content Writer' }, { value: 'social_media_manager', label: 'Social Media Manager' }, { value: 'photographer', label: 'Photographer' }, { value: 'videographer', label: 'Videographer' }, { value: 'strategist', label: 'Strategist' }, ] export const AppContext = createContext() function AppContent() { const { user, loading: authLoading, checkAuth, hasModule } = useAuth() const { t, lang } = useLanguage() const [teamMembers, setTeamMembers] = useState([]) const [brands, setBrands] = useState([]) const [teams, setTeams] = useState([]) const [loading, setLoading] = useState(true) const [showTutorial, setShowTutorial] = useState(false) const [showProfilePrompt, setShowProfilePrompt] = useState(false) const [showProfileModal, setShowProfileModal] = useState(false) const [profileForm, setProfileForm] = useState({ name: '', team_role: '', phone: '', brands: '' }) const [profileSaving, setProfileSaving] = useState(false) useEffect(() => { if (user && !authLoading) { loadInitialData() // Check if tutorial should be shown if (user.tutorial_completed === 0) { setShowTutorial(true) } // Check if profile is incomplete if (!user.profileComplete && user.role !== 'superadmin') { setShowProfilePrompt(true) } else { setShowProfilePrompt(false) } } else if (!authLoading) { setLoading(false) } }, [user, authLoading]) const getBrandName = (brandId) => { if (!brandId) return null const brand = brands.find(b => String(b._id || b.id) === String(brandId)) if (!brand) return null return lang === 'ar' && brand.name_ar ? brand.name_ar : brand.name } const loadTeam = async () => { try { const data = await api.get('/users/team') const members = Array.isArray(data) ? data : (data.data || []) setTeamMembers(members) return members } catch (err) { console.error('Failed to load team:', err) return [] } } const loadTeams = async () => { try { const data = await api.get('/teams') setTeams(Array.isArray(data) ? data : (data.data || [])) } catch (err) { console.error('Failed to load teams:', err) } } const loadInitialData = async () => { try { const [, brandsData] = await Promise.all([ loadTeam(), api.get('/brands').then(d => Array.isArray(d) ? d : (d.data || [])).catch(() => []), loadTeams(), ]) setBrands(brandsData) } catch (err) { console.error('Failed to load initial data:', err) } finally { setLoading(false) } } const handleTutorialComplete = async () => { try { await api.patch('/users/me/tutorial', { completed: true }) setShowTutorial(false) } catch (err) { console.error('Failed to complete tutorial:', err) } } if (authLoading || loading) { return (
{t('dashboard.loadingHub')}
{t('profile.completeDesc')}