"use client";

import React, { createContext, useContext, useEffect, useState, ReactNode } from "react";

export type Lang = "ar" | "en";

interface I18nContextType {
  lang: Lang;
  setLang: (l: Lang) => void;
  t: (key: string) => string;
}

const translations: Record<Lang, Record<string, string>> = {
  ar: {
    appName: "A-R",
    home: "الرئيسية",
    events: "الفعاليات",
    createEvent: "إنشاء فعالية",
    eventReports: "تقارير الفعاليات",
    noReports: "لا توجد تقارير",
    noReportsDesc: "لم يتم العثور على تقارير مطابقة",
    reportsShown: "عرض {shown} من {total}",
    packages: "الباقات",
    mySubscriptions: "اشتراكاتي",
    notifications: "الإشعارات",
    more: "المزيد",
    settings: "الإعدادات",
    login: "تسجيل الدخول",
    phone: "رقم الجوال",
    selectCountry: "اختر الدولة",
    sendOtp: "إرسال رمز التحقق",
    verifyOtp: "تحقق",
    resendCode: "إعادة الإرسال",
    resendIn: "إعادة الإرسال بعد",
    createAccount: "إنشاء حساب مقهى جديد",
    createNewAccount: "إنشاء حساب جديد",
    cafeName: "اسم المقهى",
    ownerName: "اسم صاحب المقهى",
    mobileNumber: "رقم الجوال",
    email: "البريد الإلكتروني",
    commercialReg: "رقم السجل التجاري",
    commercialFile: "ملف السجل التجاري",
    commercialRegExpiry: "تاريخ انتهاء السجل التجاري",
    uploadFile: "رفع ملف السجل التجاري",
    fileHint: "PDF, JPG, PNG - الحد الأقصى 5 ميجا",
    invalidCommercialNumber: "رقم السجل التجاري يجب أن يكون من 10 إلى 20 رقمًا",
    expiryMustBeFuture: "تاريخ الانتهاء يجب أن يكون بعد اليوم",
    invalidFileType: "الملف يجب أن يكون PDF أو JPG أو PNG",
    fileTooLarge: "حجم الملف يتجاوز 5 ميجا",
    submitRequest: "إرسال الطلب",
    pendingReview: "حسابك قيد المراجعة",
    pendingReviewDesc: "لا يمكنك الوصول إلى لوحة التحكم حتى موافقة الإدارة. سيتم إخطارك فور الموافقة.",
    welcome: "مرحبًا،",
    cafeDashboardSubtitle: "A-R Pro - لوحة تحكم المقاهي",
    cafeNavCaption: "لوحة تحكم المقاهي",
    demoCafeName: "مقهى البن الذهبي",
    activeSubscription: "الاشتراك النشط",
    activeEvents: "الفعاليات النشطة",
    totalParticipants: "إجمالي المشاركين",
    totalQrScans: "إجمالي مسح QR",
    engagementRate: "معدل التفاعل",
    redemptionRate: "معدل الاستبدال",
    rewardsIssued: "المكافآت المصدرة",
    rewardsUsed: "المكافآت المستخدمة",
    newEvent: "إنشاء فعالية جديدة",
    viewReports: "عرض التقارير",
    noEvents: "لا توجد فعاليات بعد",
    noEventsDesc: "ابدأ بإنشاء فعاليتك الأولى لجذب المزيد من العملاء",
    noMatchingEvents: "لم يتم العثور على فعاليات مطابقة",
    qrEnabled: "نشط",
    qrDisabled: "معطل",
    createFirstEvent: "إنشاء أول فعالية",
    search: "بحث",
    status: "الحالة",
    active: "نشطة",
    ended: "منتهية",
    paused: "متوقفة",
    scheduled: "مجدولة",
    date: "التاريخ",
    selectDate: "اختر التاريخ",
    selectTime: "اختر الوقت",
    hour: "ساعة",
    previousMonth: "الشهر السابق",
    nextMonth: "الشهر التالي",
    eventType: "نوع الفعالية",
    eventName: "اسم الفعالية",
    startTime: "وقت البداية",
    duration: "المدة",
    location: "الموقع / المنطقة",
    pickOnMap: "اضغط على الخريطة لتحديد الموقع",
    confirmLocation: "تأكيد الموقع",
    qrStatus: "حالة QR",
    actions: "الإجراءات",
    viewDetails: "عرض التفاصيل",
    edit: "تعديل",
    delete: "حذف",
    report: "التقرير",
    viewQr: "عرض QR",
    deleteConfirm: "هل أنت متأكد من حذف هذه الفعالية؟",
    deleteConfirmDesc: "لا يمكن التراجع عن هذا الإجراء",
    cancel: "إلغاء",
    confirm: "تأكيد",
    step: "الخطوة",
    basicDetails: "التفاصيل الأساسية",
    subscriptionCheck: "التحقق من الاشتراك",
    rewardSettings: "المكافآت وإعدادات QR",
    competitionSections: "أقسام المسابقة",
    reviewGenerate: "المراجعة وإنشاء QR",
    next: "التالي",
    back: "السابق",
    description: "الوصف",
    noActivePackage: "يجب الاشتراك في باقة فعالة قبل إنشاء فعالية",
    activePackage: "لديك باقة نشطة",
    eventTypeHint: "مسابقة / ترفيه / رياضة إلكترونية / عائلي",
    eventTypeContest: "مسابقة",
    eventTypeEntertainment: "ترفيه",
    eventTypeEsports: "رياضة إلكترونية",
    eventTypeFamily: "عائلي",
    eventTypeQuiz: "اختبار",
    eventTypeChallenge: "تحدي",
    eventTypeSpecial: "خاص",
    selectEventType: "اختر نوع الفعالية",
    eventGem: "جوهرة الفعالية",
    gemTypeRequired: "نوع الجوهرة مطلوب",
    needSection: "أضف قسماً واحداً على الأقل",
    sectionTypeOnce: "كل نوع قسم يُستخدم مرة واحدة",
    needQuestion: "يجب إضافة سؤال واحد على الأقل",
    needTwoOptions: "السؤال يحتاج اختيارين على الأقل",
    invalidCorrect: "اختيار الإجابة الصحيحة غير صالح",
    durationMax: "المدة من 30 دقيقة إلى 43200",
    nameTooLong: "اسم الفعالية حتى 255 حرف",
    timeLimitRange: "الحد الزمني من 3 إلى 300 ثانية",
    holeCountRange: "عدد الحفر من 2 إلى 20",
    correctHoleRange: "الحفرة الصحيحة يجب أن تكون ضمن عدد الحفر",
    rewardDetailsHint: "مثال: قهوة عربية مجانية",
    qrOnceNote: "كل رمز QR يمكن استخدامه مرة واحدة فقط من قبل كل عميل",
    viewPackages: "عرض الباقات",
    rewardType: "نوع المكافأة",
    drink: "مشروب",
    discount: "خصم",
    extraDay: "يوم إضافي",
    gems: "جواهر",
    rewardDetails: "تفاصيل المكافأة",
    gemType: "نوع الجوهرة",
    gemGold: "ذهبية",
    gemPurple: "بنفسجية",
    gemBlue: "زرقاء",
    gemQuantity: "عدد الجواهر",
    gemQuantityMin: "عدد الجواهر يجب أن يكون أكبر من صفر.",
    discountKind: "نوع الخصم",
    discountPercent: "نسبة مئوية",
    discountFixed: "مبلغ ثابت",
    discountValue: "قيمة الخصم",
    discountValueMin: "قيمة الخصم يجب أن تكون أكبر من صفر.",
    qrOneTime: "رمز QR صالح لمرة واحدة فقط",
    gate: "البوابة",
    speedQuestions: "أسئلة السرعة",
    thePit: "الحفرة",
    sectionName: "اسم القسم",
    sectionReward: "مكافأة القسم",
    questionsCategory: "تصنيف الأسئلة",
    addQuestion: "إضافة سؤال",
    question: "السؤال",
    answers: "الإجابات",
    correctAnswer: "الإجابة الصحيحة",
    timeLimit: "الحد الزمني (ثانية)",
    numberOfHoles: "عدد الحفر",
    correctHole: "الحفرة الصحيحة",
    generateQr: "إنشاء الفعالية",
    eventSummary: "ملخص الفعالية",
    downloadQr: "تحميل QR",
    printQr: "طباعة QR",
    copyLink: "نسخ الرابط",
    goToEvent: "الذهاب لتفاصيل الفعالية",
    stopEvent: "إيقاف الفعالية",
    resumeEvent: "استئناف الفعالية",
    eventInfo: "المعلومات",
    stopEventTitle: "إيقاف الفعالية؟",
    stopEventDesc: "لن يتمكن المستخدمون الجدد من المشاركة بعد الإيقاف",
    stopEventReason: "إيقاف من لوحة المقهى",
    participantsSummary: "ملخص المشاركين",
    questionsPreview: "معاينة الأسئلة",
    cannotEdit: "لا يمكن التعديل بعد بدء المشاركة",
    editLockedDesc: "لا يمكن تعديل الأسئلة والمكافآت وأقسام المسابقة بعد بدء المشاركة في الفعالية",
    eventReport: "تقرير الفعالية",
    qrScans: "مسح QR",
    participants: "المشاركون",
    winners: "الفائزون",
    avgParticipationTime: "متوسط وقت المشاركة",
    sectionPerformance: "أداء الأقسام",
    section: "القسم",
    successfulUsers: "المستخدمون الناجحون",
    failedUsers: "المستخدمون غير الناجحين",
    noParticipants: "لا يوجد مشاركون بعد",
    read: "مقروء",
    unread: "غير مقروء",
    accountApproved: "تمت الموافقة على الحساب",
    accountRejected: "تم رفض الحساب",
    eventAlert: "تنبيه الفعالية",
    dataRequestApproved: "تمت الموافقة على طلب تعديل البيانات",
    dataRequestRejected: "تم رفض طلب تعديل البيانات",
    adminMessage: "رسالة الإدارة",
    packageName: "اسم الباقة",
    price: "السعر",
    choosePackage: "اختر الباقة المناسبة لمقهاك",
    mostPopular: "الأكثر شعبية",
    paymentSummary: "ملخص الدفع",
    paymentPending: "تم إنشاء عملية الدفع",
    days: "يوم",
    vat: "ضريبة القيمة المضافة",
    total: "الإجمالي",
    pay: "الدفع",
    paymentSuccess: "تم الدفع بنجاح",
    currentPackage: "الباقة الحالية",
    unlimitedEvents: "فعاليات غير محدودة",
    maxActiveEvents: "فعالية نشطة",
    unavailable: "غير متاحة",
    subscriptionStatus: "حالة الاشتراك",
    startDate: "تاريخ البداية",
    endDate: "تاريخ الانتهاء",
    remainingDays: "الأيام المتبقية",
    renew: "تجديد",
    subscribeAnother: "الاشتراك في باقة أخرى",
    packageExpired: "انتهت الباقة، لا يمكنك إنشاء فعاليات جديدة حتى يتم التجديد",
    subscriptionHistory: "تاريخ الاشتراكات",
    noCurrentSubscription: "لا يوجد اشتراك حالي",
    noCurrentSubscriptionDesc: "اشترك في باقة لتفعيل خدمات المقهى",
    noSubscriptionHistory: "لا يوجد سجل اشتراكات",
    pendingPayment: "بانتظار الدفع",
    renewal: "تجديد الاشتراك",
    securePayments: "جميع المعاملات آمنة ومشفرة",
    profile: "الملف الشخصي",
    editCafeData: "تعديل بيانات المقهى",
    changeMobile: "تغيير رقم الجوال",
    currentPhoneOtp: "أدخل رمز التحقق المرسل إلى رقمك الحالي",
    newPhoneOtp: "أدخل رمز التحقق المرسل إلى الرقم الجديد",
    newMobile: "رقم الجوال الجديد",
    enableNotifications: "تفعيل الإشعارات",
    changeLanguage: "تغيير اللغة",
    aboutApp: "عن التطبيق",
    whoWeAre: "من نحن",
    vision: "الرؤية",
    platformInfo: "معلومات المنصة",
    appVersion: "الإصدار",
    appVersionValue: "2.1.0",
    releaseDate: "تاريخ الإصدار",
    releaseDateValue: "2026",
    platform: "المنصة",
    platformValue: "Web / iOS / Android",
    support: "الدعم الفني",
    supportValue: "support@a-r.app",
    headquarters: "المقر",
    headquartersValue: "الرياض، المملكة العربية السعودية",
    eventTypes: "أنواع الفعاليات",
    eventTypesValue: "البوابة، أسئلة السرعة، الحفرة",
    loading: "جاري التحميل",
    privacyPolicy: "سياسة الخصوصية",
    terms: "الشروط والأحكام",
    termsFooter: "نحتفظ بالحق في تعديل هذه الشروط في أي وقت. سيتم إخطارك بأي تغييرات جوهرية عبر الإشعارات داخل المنصة. للاستفسارات، تواصل مع فريق الدعم عبر legal@a-r.app",
    personalData: "بيانات الملف الشخصي",
    additionalData: "البيانات الإضافية",
    platformLanguage: "لغة المنصة",
    notificationSettings: "إعدادات الإشعارات",
    inAppNotifications: "إشعارات داخل المنصة",
    inAppNotificationsDesc: "استلام إشعارات عبر تطبيق وموقع المنصة",
    smsNotifications: "إشعارات الرسائل النصية (SMS)",
    smsNotificationsDesc: "استلام إشعارات عبر الرسائل النصية على الجوال",
    emailNotifications: "إشعارات البريد الإلكتروني",
    emailNotificationsDesc: "استلام إشعارات عبر البريد الإلكتروني",
    logout: "تسجيل الخروج",
    logoutDesc: "تسجيل الخروج من حسابك الحالي، سيتم إعادة توجيهك إلى شاشة تسجيل الدخول",
    specialization: "تخصص العمل",
    experienceYears: "سنوات الخبرة",
    companyName: "اسم المكتب / الشركة",
    briefDescription: "نبذة تعريفية",
    city: "المدينة",
    deleteAccount: "حذف الحساب",
    pendingApproval: "قيد الموافقة",
    save: "حفظ",
    submitEditRequest: "ارسال طلب تعديل للاداره",
    editRequestUnderReview: "طلبك قيد المراجعة",
    editRequestUnderReviewDesc: "لا يمكنك التعديل حتى موافقة الإدارة. سيتم إخطارك فور الموافقة.",
    close: "إغلاق",
    seconds: "ثانية",
    hours: "ساعة",
    minutes: "دقيقة",
    durationMin: "يجب أن تكون قيمة المدة بالدقائق مساوية أو أكبر لـ 30.",
    yes: "نعم",
    no: "لا",
    from: "من",
    to: "إلى",
    filter: "تصفية",
    clear: "مسح",
    all: "الكل",
    today: "اليوم",
    week: "هذا الأسبوع",
    month: "هذا الشهر",
    year: "هذا العام",
    copySuccess: "تم النسخ بنجاح",
    errorOccurred: "حدث خطأ",
    requiredField: "هذا الحقل مطلوب",
    invalidPhone: "رقم جوال غير صالح",
    invalidOtp: "رمز تحقق غير صالح",
    duplicateAccount: "يوجد حساب مسجل بنفس الرقم",
    missingFields: "يرجى ملء جميع الحقول المطلوبة",
    serverError: "خطأ في الخادم، يرجى المحاولة لاحقًا",
    requestSubmitted: "تم إرسال الطلب بنجاح",
    cafeDataUpdated: "تم تحديث بيانات المقهى",
    numberChanged: "تم تغيير الرقم بنجاح",
    notificationEnabled: "تم تفعيل الإشعارات",
    notificationDisabled: "تم تعطيل الإشعارات",
    languageChanged: "تم تغيير اللغة",
    logoutConfirm: "هل أنت متأكد من تسجيل الخروج؟",
    deleteAccountConfirm: "هل أنت متأكد من حذف حسابك؟ لا يمكن التراجع عن هذا الإجراء.",
    welcomeBack: "مرحبًا بعودتك",
    enterPhone: "أدخل رقم جوالك للمتابعة",
    enterOtp: "أدخل رمز التحقق المكون من 6 أرقام",
    blockedAccount: "الحساب موقوف",
    approved: "تمت الموافقة",
    rejected: "تم الرفض",
    underReview: "قيد المراجعة",
    new: "جديد",
    eventCreated: "تم إنشاء الفعالية بنجاح",
    qrGenerated: "تم إنشاء رمز QR بنجاح",
    eventUpdated: "تم تحديث الفعالية",
    eventDeleted: "تم حذف الفعالية",
    eventStopped: "تم إيقاف الفعالية",
    subscriptionRenewed: "تم تجديد الاشتراك",
    paymentMethod: "طريقة الدفع",
    creditCard: "بطاقة ائتمان",
    mada: "مدى",
    applePay: "آبل باي",
    bankTransfer: "تحويل بنكي",
    payNow: "ادفع الآن",
    orderSummary: "ملخص الطلب",
    subtotal: "المبلغ",
    noNotifications: "لا توجد إشعارات",
    noNotificationsDesc: "لا توجد إشعارات حالياً",
    markAllRead: "تحديد الكل كمقروء",
    noData: "لا توجد بيانات",
    chartQrScans: "مسح QR عبر الزمن",
    chartParticipants: "المشاركون عبر الزمن",
    chartWinners: "الفائزون حسب القسم",
    chartRewardUsage: "معدل استخدام المكافآت",
  },
  en: {
    appName: "A-R",
    home: "Home",
    events: "Events",
    createEvent: "Create Event",
    eventReports: "Event Reports",
    noReports: "No reports",
    noReportsDesc: "No matching reports found",
    reportsShown: "Showing {shown} of {total}",
    packages: "Packages",
    mySubscriptions: "My Subscriptions",
    notifications: "Notifications",
    more: "More",
    settings: "Settings",
    login: "Login",
    phone: "Phone Number",
    selectCountry: "Select country",
    sendOtp: "Send Verification Code",
    verifyOtp: "Verify",
    resendCode: "Resend",
    resendIn: "Resend in",
    createAccount: "Create New Cafe Account",
    createNewAccount: "Create new account",
    cafeName: "Cafe Name",
    ownerName: "Cafe Owner Name",
    mobileNumber: "Mobile Number",
    email: "Email",
    commercialReg: "Commercial Registration Number",
    commercialFile: "Commercial registration file",
    commercialRegExpiry: "Commercial Registration Expiry Date",
    uploadFile: "Upload Commercial Registration File",
    fileHint: "PDF, JPG, PNG - 5 MB maximum",
    invalidCommercialNumber: "Commercial number must be 10 to 20 digits",
    expiryMustBeFuture: "Expiry date must be after today",
    invalidFileType: "File must be PDF, JPG, or PNG",
    fileTooLarge: "File exceeds 5 MB",
    submitRequest: "Submit Request",
    pendingReview: "Your Account is Under Review",
    pendingReviewDesc: "You cannot access the dashboard until admin approval. You will be notified upon approval.",
    welcome: "Welcome,",
    cafeDashboardSubtitle: "A-R Pro - Cafe Dashboard",
    cafeNavCaption: "Cafe dashboard",
    demoCafeName: "Golden Bean Cafe",
    activeSubscription: "Active Subscription",
    activeEvents: "Active Events",
    totalParticipants: "Total Participants",
    totalQrScans: "Total QR Scans",
    engagementRate: "Engagement Rate",
    redemptionRate: "Redemption Rate",
    rewardsIssued: "Rewards Issued",
    rewardsUsed: "Rewards Used",
    newEvent: "Create New Event",
    viewReports: "View Reports",
    noEvents: "No events yet",
    noEventsDesc: "Start by creating your first event to attract more customers",
    noMatchingEvents: "No matching events found",
    qrEnabled: "Active",
    qrDisabled: "Disabled",
    createFirstEvent: "Create First Event",
    search: "Search",
    status: "Status",
    active: "Active",
    ended: "Ended",
    paused: "Paused",
    scheduled: "Scheduled",
    date: "Date",
    selectDate: "Select a date",
    selectTime: "Select a time",
    hour: "Hour",
    previousMonth: "Previous month",
    nextMonth: "Next month",
    eventType: "Event Type",
    eventName: "Event Name",
    startTime: "Start Time",
    duration: "Duration",
    location: "Location / Area",
    pickOnMap: "Tap the map to choose a location",
    confirmLocation: "Confirm location",
    qrStatus: "QR Status",
    actions: "Actions",
    viewDetails: "View Details",
    edit: "Edit",
    delete: "Delete",
    report: "Report",
    viewQr: "View QR",
    deleteConfirm: "Are you sure you want to delete this event?",
    deleteConfirmDesc: "This action cannot be undone",
    cancel: "Cancel",
    confirm: "Confirm",
    step: "Step",
    basicDetails: "Basic Details",
    subscriptionCheck: "Subscription Check",
    rewardSettings: "Rewards & QR Settings",
    competitionSections: "Competition Sections",
    reviewGenerate: "Review & Generate QR",
    next: "Next",
    back: "Back",
    description: "Description",
    noActivePackage: "You must subscribe to an active package before creating an event",
    activePackage: "You have an active package",
    eventTypeHint: "Quiz / entertainment / esports / family",
    eventTypeContest: "Contest",
    eventTypeEntertainment: "Entertainment",
    eventTypeEsports: "Esports",
    eventTypeFamily: "Family",
    eventTypeQuiz: "Quiz",
    eventTypeChallenge: "Challenge",
    eventTypeSpecial: "Special",
    selectEventType: "Select event type",
    eventGem: "Event gem",
    gemTypeRequired: "Gem type is required",
    needSection: "Add at least one section",
    sectionTypeOnce: "Each section type can be used once",
    needQuestion: "Add at least one question",
    needTwoOptions: "A question needs at least two options",
    invalidCorrect: "The correct option is invalid",
    durationMax: "Duration must be from 30 to 43200 minutes",
    nameTooLong: "Event name can be up to 255 characters",
    timeLimitRange: "Time limit must be from 3 to 300 seconds",
    holeCountRange: "Hole count must be from 2 to 20",
    correctHoleRange: "The correct hole must be within the hole count",
    rewardDetailsHint: "e.g. Free Arabic coffee",
    qrOnceNote: "Each QR code can only be used once per customer",
    viewPackages: "View Packages",
    rewardType: "Reward Type",
    drink: "Drink",
    discount: "Discount",
    extraDay: "Extra Day",
    gems: "Gems",
    rewardDetails: "Reward Details",
    gemType: "Gem type",
    gemGold: "Gold",
    gemPurple: "Purple",
    gemBlue: "Blue",
    gemQuantity: "Gem quantity",
    gemQuantityMin: "Gem quantity must be greater than zero.",
    discountKind: "Discount kind",
    discountPercent: "Percent",
    discountFixed: "Fixed amount",
    discountValue: "Discount value",
    discountValueMin: "Discount value must be greater than zero.",
    qrOneTime: "QR reward code is valid for one-time use only",
    gate: "The Gate",
    speedQuestions: "Speed Questions",
    thePit: "The Pit",
    sectionName: "Section Name",
    sectionReward: "Section Reward",
    questionsCategory: "Questions Category",
    addQuestion: "Add Question",
    question: "Question",
    answers: "Answers",
    correctAnswer: "Correct Answer",
    timeLimit: "Time Limit (seconds)",
    numberOfHoles: "Number of Holes",
    correctHole: "Correct Hole",
    generateQr: "Create Event",
    eventSummary: "Event Summary",
    downloadQr: "Download QR",
    printQr: "Print QR",
    copyLink: "Copy Link",
    goToEvent: "Go to Event Details",
    stopEvent: "Stop Event",
    resumeEvent: "Resume Event",
    eventInfo: "Info",
    stopEventTitle: "Stop event?",
    stopEventDesc: "New users will not be able to participate after stopping",
    stopEventReason: "Stopped from the cafe dashboard",
    participantsSummary: "Participants Summary",
    questionsPreview: "Questions Preview",
    cannotEdit: "Cannot edit after participation starts",
    editLockedDesc: "Questions, rewards, and competition sections cannot be modified after participation has started",
    eventReport: "Event Report",
    qrScans: "QR Scans",
    participants: "Participants",
    winners: "Winners",
    avgParticipationTime: "Avg Participation Time",
    sectionPerformance: "Section Performance",
    section: "Section",
    successfulUsers: "Successful Users",
    failedUsers: "Failed Users",
    noParticipants: "No participants yet",
    read: "Read",
    unread: "Unread",
    accountApproved: "Account Approved",
    accountRejected: "Account Rejected",
    eventAlert: "Event Alert",
    dataRequestApproved: "Data Change Request Approved",
    dataRequestRejected: "Data Change Request Rejected",
    adminMessage: "Admin Message",
    packageName: "Package Name",
    price: "Price",
    choosePackage: "Choose the right package for your cafe",
    mostPopular: "Most Popular",
    paymentSummary: "Payment Summary",
    paymentPending: "Payment has been created",
    days: "days",
    vat: "VAT",
    total: "Total",
    pay: "Pay",
    paymentSuccess: "Payment Successful",
    currentPackage: "Current Package",
    unlimitedEvents: "Unlimited events",
    maxActiveEvents: "active events",
    unavailable: "Unavailable",
    subscriptionStatus: "Subscription Status",
    startDate: "Start Date",
    endDate: "End Date",
    remainingDays: "Remaining Days",
    renew: "Renew",
    subscribeAnother: "Subscribe to Another Package",
    packageExpired: "Package expired, you cannot create new events until renewal",
    subscriptionHistory: "Subscription History",
    noCurrentSubscription: "No current subscription",
    noCurrentSubscriptionDesc: "Subscribe to a package to activate cafe services",
    noSubscriptionHistory: "No subscription history",
    pendingPayment: "Pending payment",
    renewal: "Subscription renewal",
    securePayments: "All transactions are secure and encrypted",
    profile: "Profile",
    editCafeData: "Edit Cafe Data",
    changeMobile: "Change Mobile Number",
    currentPhoneOtp: "Enter the verification code sent to your current number",
    newPhoneOtp: "Enter the verification code sent to the new number",
    newMobile: "New mobile number",
    enableNotifications: "Enable Notifications",
    changeLanguage: "Change Language",
    aboutApp: "About App",
    whoWeAre: "Who We Are",
    vision: "Vision",
    platformInfo: "Platform Info",
    appVersion: "Version",
    appVersionValue: "2.1.0",
    releaseDate: "Release Date",
    releaseDateValue: "2026",
    platform: "Platform",
    platformValue: "Web / iOS / Android",
    support: "Support",
    supportValue: "support@a-r.app",
    headquarters: "Headquarters",
    headquartersValue: "Riyadh, Saudi Arabia",
    eventTypes: "Event Types",
    eventTypesValue: "The Gate, Speed Questions, The Pit",
    loading: "Loading",
    privacyPolicy: "Privacy Policy",
    terms: "Terms & Conditions",
    termsFooter: "We reserve the right to modify these terms at any time. You will be notified of any material changes via in-platform notifications. For inquiries, contact support at legal@a-r.app",
    logout: "Logout",
    logoutDesc: "Logout from your current account, you will be redirected to login screen",
    personalData: "Personal Data",
    additionalData: "Additional Data",
    platformLanguage: "Platform Language",
    notificationSettings: "Notification Settings",
    inAppNotifications: "In-App Notifications",
    inAppNotificationsDesc: "Receive notifications through the platform app and website",
    smsNotifications: "SMS Notifications",
    smsNotificationsDesc: "Receive notifications via text messages on your mobile",
    emailNotifications: "Email Notifications",
    emailNotificationsDesc: "Receive notifications via email",
    specialization: "Work Specialization",
    experienceYears: "Years of Experience",
    companyName: "Office / Company Name",
    briefDescription: "Brief Description",
    city: "City",
    deleteAccount: "Delete Account",
    pendingApproval: "Pending Approval",
    save: "Save",
    submitEditRequest: "Submit edit request to admin",
    editRequestUnderReview: "Your request is under review",
    editRequestUnderReviewDesc: "You cannot edit until admin approval. You will be notified upon approval.",
    close: "Close",
    seconds: "seconds",
    hours: "hours",
    minutes: "minutes",
    durationMin: "Duration must be at least 30 minutes.",
    yes: "Yes",
    no: "No",
    from: "From",
    to: "To",
    filter: "Filter",
    clear: "Clear",
    all: "All",
    today: "Today",
    week: "This Week",
    month: "This Month",
    year: "This Year",
    copySuccess: "Copied successfully",
    errorOccurred: "An error occurred",
    requiredField: "This field is required",
    invalidPhone: "Invalid phone number",
    invalidOtp: "Invalid verification code",
    duplicateAccount: "An account already exists with this number",
    missingFields: "Please fill all required fields",
    serverError: "Server error, please try again later",
    requestSubmitted: "Request submitted successfully",
    cafeDataUpdated: "Cafe data updated",
    numberChanged: "Number changed successfully",
    notificationEnabled: "Notifications enabled",
    notificationDisabled: "Notifications disabled",
    languageChanged: "Language changed",
    logoutConfirm: "Are you sure you want to logout?",
    deleteAccountConfirm: "Are you sure you want to delete your account? This cannot be undone.",
    welcomeBack: "Welcome Back",
    enterPhone: "Enter your phone number to continue",
    enterOtp: "Enter the 6-digit verification code",
    blockedAccount: "Account blocked",
    approved: "Approved",
    rejected: "Rejected",
    underReview: "Under Review",
    new: "New",
    eventCreated: "Event created successfully",
    qrGenerated: "QR code generated successfully",
    eventUpdated: "Event updated",
    eventDeleted: "Event deleted",
    eventStopped: "Event stopped",
    subscriptionRenewed: "Subscription renewed",
    paymentMethod: "Payment Method",
    creditCard: "Credit Card",
    mada: "Mada",
    applePay: "Apple Pay",
    bankTransfer: "Bank Transfer",
    payNow: "Pay Now",
    orderSummary: "Order Summary",
    subtotal: "Subtotal",
    noNotifications: "No notifications",
    noNotificationsDesc: "There are no notifications yet",
    markAllRead: "Mark all as read",
    noData: "No data",
    chartQrScans: "QR Scans Over Time",
    chartParticipants: "Participants Over Time",
    chartWinners: "Winners by Section",
    chartRewardUsage: "Reward Usage Rate",
  },
};

const I18nContext = createContext<I18nContextType>({
  lang: "ar",
  setLang: () => {},
  t: (key: string) => key,
});

export function I18nProvider({ children }: { children: ReactNode }) {
  const [lang, setLang] = useState<Lang>("ar");

  const t = (key: string): string => {
    return translations[lang][key] || key;
  };

  useEffect(() => {
    document.documentElement.lang = lang;
    document.documentElement.dir = lang === "ar" ? "rtl" : "ltr";
  }, [lang]);

  const handleSetLang = (l: Lang) => {
    setLang(l);
  };

  return (
    <I18nContext.Provider value={{ lang, setLang: handleSetLang, t }}>
      {children}
    </I18nContext.Provider>
  );
}

export function useI18n() {
  return useContext(I18nContext);
}