import type { Lang } from './api';

const fr = {
  tagline: 'Savoir où est le bus, avant de l’attendre',
  phone: 'Téléphone', password: 'Mot de passe', name: 'Nom (facultatif)',
  login: 'Se connecter', loggingIn: 'Connexion…', register: 'Créer mon compte',
  guest: 'Continuer sans compte', newHere: 'Nouveau ?', createAccount: 'Créer un compte',
  haveAccount: 'Déjà un compte ?', backToLogin: 'Se connecter',
  chooseLine: 'Choisissez votre ligne', linesActive: (n: number) => `Oran · ${n} ligne${n > 1 ? 's' : ''} en service`,
  search: 'Rechercher une ligne ou un arrêt', noLine: 'Aucune ligne trouvée',
  busesLive: (n: number) => n === 0 ? 'Aucun bus en ligne pour l’instant' : `${n} bus en ligne`,
  live: 'Live', liveMap: 'En direct · vue 3D',
  nextBus: 'Prochain bus', min: 'min', busHere: 'Le bus est là', atStop: 'à l’arrêt',
  stop: 'Arrêt', followingBus: 'Bus suivant', none: '—', noBusComing: 'Aucun bus en approche',
  noBusHint: 'Les bus apparaîtront dès qu’un chauffeur démarre son service.',
  tapStop: 'Touchez un arrêt sur la carte pour le choisir',
  arriving: 'Votre bus arrive dans moins d’une minute', arrived: 'Votre bus est arrivé à l’arrêt',
  occupancy: 'Affluence', occ: ['Vide', 'Calme', 'Chargé', 'Plein'],
  gpsByDriver: 'Position envoyée par le chauffeur', updated: (s: number) => `mise à jour il y a ${s} s`,
  lost: 'Signal perdu', offRoute: 'Hors itinéraire',
  you: 'Vous', logout: 'Déconnexion', driverMode: 'Mode chauffeur',
  // chauffeur
  driverTitle: 'Démarrer un service', chooseBus: 'Bus', chooseLineDrv: 'Ligne et sens',
  start: 'Démarrer le service', starting: 'Démarrage…', end: 'Terminer le service',
  endConfirm: 'Terminer le service ?', endConfirmMsg: 'Votre bus disparaîtra de la carte des usagers.',
  cancel: 'Annuler', confirm: 'Confirmer',
  inService: 'En service', sending: 'Position envoyée', queued: (n: number) => `${n} position${n > 1 ? 's' : ''} en attente (pas de réseau)`,
  lastSent: (s: number) => `dernier envoi il y a ${s} s`, waitingGps: 'Recherche du signal GPS…',
  progress: 'Avancement', terminus: 'Terminus atteint', switchDir: 'Passer au sens retour',
  permDenied: 'Autorisez la localisation « Toujours » pour que votre bus reste visible écran éteint.',
  openSettings: 'Ouvrir les réglages', resume: 'Reprendre le service en cours',
  // erreurs
  network: 'Pas de connexion au serveur. Vérifiez internet.', error: 'Erreur', retry: 'Réessayer',
  fillAll: 'Entrez votre numéro et votre mot de passe',
};
type Dict = typeof fr;

const ar: Dict = {
  tagline: 'اعرف مكان الحافلة قبل أن تنتظرها',
  phone: 'الهاتف', password: 'كلمة المرور', name: 'الاسم (اختياري)',
  login: 'تسجيل الدخول', loggingIn: 'جارٍ الدخول…', register: 'إنشاء حسابي',
  guest: 'المتابعة بدون حساب', newHere: 'جديد؟', createAccount: 'إنشاء حساب',
  haveAccount: 'لديك حساب؟', backToLogin: 'تسجيل الدخول',
  chooseLine: 'اختر خطك', linesActive: (n) => `وهران · ${n} خط في الخدمة`,
  search: 'ابحث عن خط أو محطة', noLine: 'لا يوجد خط',
  busesLive: (n) => n === 0 ? 'لا توجد حافلة في الخدمة حاليًا' : `${n} حافلة في الخدمة`,
  live: 'مباشر', liveMap: 'مباشر · عرض ثلاثي الأبعاد',
  nextBus: 'الحافلة القادمة', min: 'د', busHere: 'الحافلة وصلت', atStop: 'في المحطة',
  stop: 'المحطة', followingBus: 'الحافلة التالية', none: '—', noBusComing: 'لا توجد حافلة قادمة',
  noBusHint: 'ستظهر الحافلات عندما يبدأ السائق خدمته.',
  tapStop: 'المس محطة على الخريطة لاختيارها',
  arriving: 'حافلتك تصل في أقل من دقيقة', arrived: 'وصلت حافلتك إلى المحطة',
  occupancy: 'الازدحام', occ: ['فارغة', 'هادئة', 'مزدحمة', 'ممتلئة'],
  gpsByDriver: 'الموقع يرسله السائق', updated: (s) => `تحديث منذ ${s} ث`,
  lost: 'فُقدت الإشارة', offRoute: 'خارج المسار',
  you: 'أنت', logout: 'تسجيل الخروج', driverMode: 'وضع السائق',
  driverTitle: 'بدء الخدمة', chooseBus: 'الحافلة', chooseLineDrv: 'الخط والاتجاه',
  start: 'بدء الخدمة', starting: 'جارٍ البدء…', end: 'إنهاء الخدمة',
  endConfirm: 'إنهاء الخدمة؟', endConfirmMsg: 'ستختفي حافلتك من خريطة الركاب.',
  cancel: 'إلغاء', confirm: 'تأكيد',
  inService: 'في الخدمة', sending: 'تم إرسال الموقع', queued: (n) => `${n} موقع في الانتظار (لا توجد شبكة)`,
  lastSent: (s) => `آخر إرسال منذ ${s} ث`, waitingGps: 'جارٍ البحث عن إشارة GPS…',
  progress: 'التقدم', terminus: 'الوصول إلى المحطة الأخيرة', switchDir: 'التحويل إلى اتجاه العودة',
  permDenied: 'اسمح بالموقع «دائمًا» حتى تبقى حافلتك ظاهرة والشاشة مطفأة.',
  openSettings: 'فتح الإعدادات', resume: 'استئناف الخدمة الجارية',
  network: 'لا يوجد اتصال بالخادم. تحقق من الإنترنت.', error: 'خطأ', retry: 'إعادة المحاولة',
  fillAll: 'أدخل رقمك وكلمة المرور',
};

const en: Dict = {
  tagline: 'Know where the bus is before you wait for it',
  phone: 'Phone', password: 'Password', name: 'Name (optional)',
  login: 'Sign in', loggingIn: 'Signing in…', register: 'Create my account',
  guest: 'Continue without an account', newHere: 'New here?', createAccount: 'Create an account',
  haveAccount: 'Already have an account?', backToLogin: 'Sign in',
  chooseLine: 'Choose your line', linesActive: (n) => `Oran · ${n} line${n > 1 ? 's' : ''} in service`,
  search: 'Search a line or stop', noLine: 'No line found',
  busesLive: (n) => n === 0 ? 'No bus running right now' : `${n} bus${n > 1 ? 'es' : ''} running`,
  live: 'Live', liveMap: 'Live · 3D view',
  nextBus: 'Next bus', min: 'min', busHere: 'Bus is here', atStop: 'at the stop',
  stop: 'Stop', followingBus: 'Following bus', none: '—', noBusComing: 'No bus coming',
  noBusHint: 'Buses appear as soon as a driver starts their service.',
  tapStop: 'Tap a stop on the map to choose it',
  arriving: 'Your bus arrives in less than a minute', arrived: 'Your bus has reached the stop',
  occupancy: 'Crowding', occ: ['Empty', 'Quiet', 'Busy', 'Full'],
  gpsByDriver: 'Position sent by the driver', updated: (s) => `updated ${s} s ago`,
  lost: 'Signal lost', offRoute: 'Off route',
  you: 'You', logout: 'Sign out', driverMode: 'Driver mode',
  driverTitle: 'Start a service', chooseBus: 'Bus', chooseLineDrv: 'Line and direction',
  start: 'Start service', starting: 'Starting…', end: 'End service',
  endConfirm: 'End the service?', endConfirmMsg: 'Your bus will disappear from the passengers’ map.',
  cancel: 'Cancel', confirm: 'Confirm',
  inService: 'In service', sending: 'Position sent', queued: (n) => `${n} position${n > 1 ? 's' : ''} waiting (no network)`,
  lastSent: (s) => `last sent ${s} s ago`, waitingGps: 'Looking for GPS signal…',
  progress: 'Progress', terminus: 'Terminus reached', switchDir: 'Switch to return direction',
  permDenied: 'Allow location “Always” so your bus stays visible with the screen off.',
  openSettings: 'Open settings', resume: 'Resume current service',
  network: 'Cannot reach the server. Check your internet.', error: 'Error', retry: 'Retry',
  fillAll: 'Enter your phone number and password',
};

export const DICTS: Record<Lang, Dict> = { fr, ar, en };
export type { Dict };

export function fmtDist(m: number, lang: Lang): string {
  if (m >= 1000) return (m / 1000).toFixed(1).replace('.', lang === 'en' ? '.' : ',') + (lang === 'ar' ? ' كم' : ' km');
  return Math.round(m / 10) * 10 + (lang === 'ar' ? ' م' : ' m');
}
