import { Injectable, signal } from '@angular/core';

type Lang = 'ar' | 'en';

const DICT: Record<string, { ar: string; en: string }> = {
  brand:        { ar: 'عسكر جروب', en: 'Askar Group' },
  tagline:      { ar: 'منظّمو حفلات الزفاف', en: 'Wedding Planner' },

  hero_script:  { ar: 'لحظة لا تُنسى', en: 'Happily ever after' },
  hero_eyebrow: { ar: 'مناسبتك تبدأ هنا', en: 'Your celebration begins here' },
  hero_title:   { ar: 'اعثر على القاعة المثالية ليومك', en: 'Find the perfect venue for your day' },
  hero_sub:     { ar: 'أجب عن بضعة أسئلة ودعنا نطابق قاعاتنا الفاخرة مع رؤيتك للحفل المثالي.', en: 'Answer a few questions and let us match our signature halls to your vision.' },
  begin:        { ar: 'لنبدأ', en: 'Begin' },
  hero_loc:     { ar: 'قاعات مختارة · القاهرة الجديدة والشيخ زايد', en: 'Signature halls · New Cairo & Sheikh Zayed' },

  how_eyebrow:  { ar: 'كيف تعمل', en: 'How it works' },
  how_title:    { ar: 'ثلاث خطوات إلى يومك المثالي', en: 'Three steps to your perfect day' },
  how1_t:       { ar: 'أخبرنا عن مناسبتك', en: 'Tell us your vision' },
  how1_d:       { ar: 'عدد الضيوف، الميزانية، التاريخ، ونوع الضيافة — في دقيقة واحدة.', en: 'Guests, budget, date and catering style — in about a minute.' },
  how2_t:       { ar: 'نطابق القاعات لك', en: 'We match your halls' },
  how2_d:       { ar: 'يرتّب محرّكنا القاعات الأنسب لمتطلباتك مع أسباب واضحة.', en: 'Our engine ranks the best-fit halls for you, with clear reasons.' },
  how3_t:       { ar: 'زُر واحتفل', en: 'Visit & celebrate' },
  how3_d:       { ar: 'احجز زيارة، اطّلع على عرضك، ودع فريقنا يعتني بكل التفاصيل.', en: 'Book a visit, review your proposal, and let our team handle the rest.' },

  cta_script:   { ar: 'لنبدأ القصة', en: 'Let\'s begin' },
  cta_title:    { ar: 'هل أنت مستعد لتخطيط يومك؟', en: 'Ready to plan your day?' },
  cta_sub:      { ar: 'دقيقة واحدة تكفي لنعرض عليك القاعات الأنسب لمناسبتك.', en: 'One minute is all it takes to see the halls made for your celebration.' },
  cta_btn:      { ar: 'ابدأ الآن', en: 'Start now' },

  step_event:   { ar: 'مناسبتك', en: 'Your event' },
  step_fnb:     { ar: 'الضيافة', en: 'Food & drink' },
  step_venue:   { ar: 'نوع القاعة', en: 'Venue style' },
  step_budget:  { ar: 'الميزانية والتاريخ', en: 'Budget & date' },
  step_contact: { ar: 'بيانات التواصل', en: 'Your details' },

  q_event_type: { ar: 'ما نوع المناسبة؟', en: 'What are you celebrating?' },
  q_attendees:  { ar: 'كم عدد الضيوف تقريباً؟', en: 'About how many guests?' },
  q_fnb:        { ar: 'ما مستوى الضيافة الذي تفضله؟', en: 'What level of catering?' },
  q_venue:      { ar: 'نوع القاعة: اوبن اير (قاعة مفتوحة) أم مغلقة؟', en: 'Hall type: open-air or indoor?' },
  q_budget:     { ar: 'ما ميزانيتك التقريبية؟', en: 'What is your approximate budget?' },
  budget_from:  { ar: 'من', en: 'From' },
  budget_to:    { ar: 'إلى', en: 'To' },
  sel_day:      { ar: 'اليوم', en: 'Day' },
  sel_month:    { ar: 'الشهر', en: 'Month' },
  sel_year:     { ar: 'السنة', en: 'Year' },
  guests_unit:  { ar: 'ضيف', en: 'guests' },
  q_date:       { ar: 'متى المناسبة؟', en: 'When is your event?' },
  date_specific:{ ar: 'تواريخ محددة', en: 'Specific dates' },
  date_flexible:{ ar: 'مرن (أي يوم بالشهر)', en: 'Flexible (any day that month)' },
  add_date:     { ar: 'أضف تاريخاً', en: 'Add date' },
  add_dates_hint:{ ar: 'أضف تاريخاً واحداً أو أكثر تفكّر فيه لمناسبتك.', en: 'Add one or more dates you\'re considering.' },
  flex_hint:    { ar: 'سنطابق القاعات المتاحة في عطلات نهاية الأسبوع خلال هذا الشهر.', en: 'We\'ll match halls available on weekends that month.' },
  past_date:    { ar: 'يرجى اختيار تاريخ مستقبلي.', en: 'Please pick a future date.' },
  q_contact:    { ar: 'كيف نتواصل معك؟', en: 'How can we reach you?' },

  f_name:   { ar: 'الاسم', en: 'Full name' },
  f_phone:  { ar: 'رقم الهاتف', en: 'Phone' },
  f_email:  { ar: 'البريد الإلكتروني (اختياري)', en: 'Email (optional)' },
  wa_same:  { ar: 'هذا الرقم لديه واتساب', en: 'This number is on WhatsApp' },
  wa_number:{ ar: 'رقم واتساب', en: 'WhatsApp number' },
  guests:   { ar: 'ضيف', en: 'guests' },

  ev_wedding: { ar: 'زفاف', en: 'Wedding' },
  ev_engagement: { ar: 'خطوبة', en: 'Engagement' },
  ev_corporate: { ar: 'مؤتمر / شركة', en: 'Corporate' },
  ev_birthday: { ar: 'عيد ميلاد', en: 'Birthday' },
  ev_other: { ar: 'أخرى', en: 'Other' },

  next:    { ar: 'التالي', en: 'Next' },
  back:    { ar: 'السابق', en: 'Back' },
  see_matches: { ar: 'اعرض القاعات المطابقة', en: 'See matching halls' },

  results_title: { ar: 'القاعات المطابقة لمناسبتك', en: 'Halls matched to your event' },
  results_sub:   { ar: 'مرتبة حسب مدى ملاءمتها لمتطلباتك', en: 'Ranked by how well they fit your requirements' },
  match:   { ar: 'مطابقة', en: 'Match' },
  near:    { ar: 'قريبة', en: 'Close fit' },
  why_not: { ar: 'لمعرفتك', en: 'Good to know' },
  capacity: { ar: 'السعة', en: 'Capacity' },
  from:    { ar: 'تبدأ من', en: 'from' },
  start_over: { ar: 'ابدأ من جديد', en: 'Start over' },
  loading: { ar: 'جارٍ المطابقة…', en: 'Matching…' },

  // Hall detail
  view_hall:       { ar: 'استكشف القاعة', en: 'Explore hall' },
  back_to_results: { ar: 'العودة للنتائج', en: 'Back to results' },
  about:           { ar: 'نبذة', en: 'About' },
  features:        { ar: 'المميزات', en: 'Features' },
  gallery:         { ar: 'معرض الصور', en: 'Gallery' },
  virtual_tour:    { ar: 'جولة افتراضية 360°', en: '360° virtual tour' },
  choose_package:  { ar: 'اختر باقة', en: 'Choose a package' },
  optional_addons: { ar: 'إضافات اختيارية', en: 'Optional add-ons' },
  per_person:      { ar: 'للفرد', en: 'per person' },
  whats_included:  { ar: 'ما تتضمنه الباقة', en: "What's included" },
  customize_hint:  { ar: '— عدّلها كما تشاء', en: '— customize as you like' },
  view_contents:   { ar: 'المحتويات', en: 'Contents' },
  swap_option:     { ar: 'استبدل بـ', en: 'Swap for' },
  keep_as_is:      { ar: 'بدون تغيير', en: 'Keep as is' },
  swap_to_prefix:  { ar: 'استبدل بـ', en: 'Swap to' },
  replace_qty:     { ar: 'استبدل العدد', en: 'Replace' },
  each:            { ar: 'للوحدة', en: 'each' },
  availability:    { ar: 'الإتاحة', en: 'Availability' },
  cal_available:   { ar: 'متاح', en: 'Available' },
  cal_booked:      { ar: 'محجوز', en: 'Booked' },
  cal_your_date:   { ar: 'تاريخك', en: 'Your date' },
  view_details:    { ar: 'التفاصيل', en: 'Details' },
  swaps:           { ar: 'الاستبدالات', en: 'Swaps' },
  all_occasions:   { ar: 'كل المناسبات', en: 'All occasions' },
  optional:        { ar: 'اختياري', en: 'Optional' },
  add_to_selection:{ ar: 'أضف إلى اختياراتي', en: 'Add to my selection' },
  update_selection:{ ar: 'تحديث الاختيار', en: 'Update selection' },
  added:           { ar: 'تمت الإضافة', en: 'Added' },
  no_packages:     { ar: 'باقات مخصصة عند الطلب', en: 'Custom packages on request' },

  // Selection
  my_selection:    { ar: 'اختياراتي', en: 'My selection' },
  selection_count: { ar: 'قاعة مختارة', en: 'selected' },
  selection_empty: { ar: 'لم تختر أي قاعة بعد.', en: 'You haven\'t selected any halls yet.' },
  browse_halls:    { ar: 'تصفح القاعات', en: 'Browse halls' },
  estimated_total: { ar: 'التكلفة التقديرية', en: 'Estimated total' },
  package:         { ar: 'الباقة', en: 'Package' },
  addons_label:    { ar: 'الإضافات', en: 'Add-ons' },
  remove:          { ar: 'إزالة', en: 'Remove' },
  continue_to_visits: { ar: 'متابعة لحجز الزيارة', en: 'Continue to visit booking' },

  // Visit booking
  book_visit:      { ar: 'احجز زيارة المعرض', en: 'Book an office visit' },
  visit_intro:     { ar: 'اختر موعداً لزيارة كل فرع لمعاينة القاعات.', en: 'Pick a time to visit each location and tour the halls.' },
  pick_date:       { ar: 'اختر التاريخ', en: 'Pick a date' },
  pick_time:       { ar: 'الوقت', en: 'Time' },
  halls_at:        { ar: 'القاعات', en: 'Halls' },
  confirm_visits:  { ar: 'تأكيد الزيارات', en: 'Confirm visits' },
  visits_booked:   { ar: 'تم حجز زيارتك!', en: 'Your visit is booked!' },
  visits_booked_msg: { ar: 'سيتواصل معك فريق المبيعات لتأكيد الموعد.', en: 'Our team will reach out to confirm your appointment.' },
  open_days:       { ar: 'أيام العمل', en: 'Open days' },
  open_hours:      { ar: 'مواعيد العمل', en: 'Working hours' },
  closed_that_day: { ar: 'هذا الفرع مغلق في هذا اليوم — اختر يوماً آخر.', en: 'This location is closed that day — please pick another.' },
  d0: { ar: 'الأحد', en: 'Sun' },
  d1: { ar: 'الإثنين', en: 'Mon' },
  d2: { ar: 'الثلاثاء', en: 'Tue' },
  d3: { ar: 'الأربعاء', en: 'Wed' },
  d4: { ar: 'الخميس', en: 'Thu' },
  d5: { ar: 'الجمعة', en: 'Fri' },
  d6: { ar: 'السبت', en: 'Sat' },

  // Account / proposal
  my_account:      { ar: 'حسابي', en: 'My account' },
  verify_phone:    { ar: 'تأكيد رقم الهاتف', en: 'Verify your phone' },
  otp_intro:       { ar: 'سنرسل رمز تحقق إلى رقمك للوصول إلى عرضك.', en: 'We\'ll send a code to your phone to access your proposal.' },
  send_code:       { ar: 'إرسال الرمز', en: 'Send code' },
  enter_code:      { ar: 'أدخل الرمز', en: 'Enter the code' },
  verify:          { ar: 'تحقق', en: 'Verify' },
  sign_in:         { ar: 'تسجيل الدخول', en: 'Sign in' },
  signin_intro:    { ar: 'سجّل الدخول للوصول إلى عرضك وزياراتك ومدفوعاتك.', en: 'Sign in to access your proposal, visits and payments.' },
  tab_phone:       { ar: 'الهاتف', en: 'Phone' },
  tab_email:       { ar: 'الإيميل', en: 'Email' },
  tab_password:    { ar: 'كلمة المرور', en: 'Password' },
  f_password:      { ar: 'كلمة المرور', en: 'Password' },
  password_hint:   { ar: 'سجّل برمز مرة واحدة أولاً، ثم عيّن كلمة مرور من حسابك.', en: 'Sign in with a one-time code first, then set a password from your account.' },
  change:          { ar: 'تغيير', en: 'Change' },
  signin_failed:   { ar: 'تعذّر تسجيل الدخول. حاول مرة أخرى.', en: 'Sign-in failed. Please try again.' },
  invalid_code:    { ar: 'رمز غير صحيح.', en: 'Invalid code.' },
  portal_password: { ar: 'كلمة مرور الحساب', en: 'Account password' },
  set_password_intro: { ar: 'عيّن كلمة مرور لتسجيل الدخول بالبريد وكلمة المرور لاحقاً.', en: 'Set a password to sign in with email & password next time.' },
  save_password:   { ar: 'حفظ كلمة المرور', en: 'Save password' },
  password_saved:  { ar: 'تم حفظ كلمة المرور.', en: 'Password saved.' },
  test_signin:      { ar: 'تسجيل دخول تجريبي', en: 'Test sign-in' },
  test_signin_intro:{ ar: 'ادخل كعميل تجريبي لمتابعة الاختبار:', en: 'Sign in as a demo client to keep testing:' },
  test_signin_btn:  { ar: 'دخول بنقرة واحدة ←', en: 'One-tap sign in →' },
  my_events:       { ar: 'مناسباتي', en: 'My events' },
  my_visits:       { ar: 'زياراتي', en: 'My visits' },
  payments:        { ar: 'المدفوعات', en: 'Payments' },
  no_bookings:     { ar: 'لا توجد حجوزات مؤكدة بعد.', en: 'No confirmed bookings yet.' },
  signed_in_as:    { ar: 'مسجّل الدخول باسم', en: 'Signed in as' },
  sign_out:        { ar: 'تسجيل الخروج', en: 'Sign out' },
  view_proposal:   { ar: 'عرضي والمدفوعات', en: 'My proposal & payments' },
  login_now:       { ar: 'تسجيل الدخول الآن', en: 'Log in now' },
  // Account rework + change requests
  st_draft:        { ar: 'مسودّة — قابلة للتعديل', en: 'Draft — editable' },
  st_locked:       { ar: 'مُتعاقد عليه', en: 'Contracted' },
  extras_label:    { ar: 'إضافات الباقة', en: 'Package extras' },
  swaps_label:     { ar: 'الاستبدالات', en: 'Swaps' },
  grand_total:     { ar: 'الإجمالي الكلي', en: 'Grand total' },
  edit_selection:  { ar: 'تعديل اختياراتي', en: 'Edit my selection' },
  edit_pre_contract_hint: { ar: 'يمكنك التعديل بحرّية حتى توقيع العقد.', en: 'You can edit freely until the contract is signed.' },
  locked_hint:     { ar: 'تم التعاقد — أي تعديل يتطلب طلباً للموافقة أدناه.', en: 'Contracted — any change needs an approval request below.' },
  request_change:  { ar: 'طلب تعديل', en: 'Request a change' },
  request_change_intro_open:   { ar: 'أخبرنا بأي تعديل وسنطبّقه سريعاً.', en: 'Tell us any change and we will apply it quickly.' },
  request_change_intro_locked: { ar: 'بعد التعاقد، يخضع أي تعديل لموافقة فريقنا.', en: 'After the contract, any change is subject to our team’s approval.' },
  request_change_ph: { ar: 'اكتب التعديل المطلوب…', en: 'Describe the change you need…' },
  send_request:    { ar: 'إرسال الطلب', en: 'Send request' },
  request_sent:    { ar: 'تم إرسال طلبك. سيتواصل معك الفريق.', en: 'Your request was sent. The team will follow up.' },
  cr_pending:      { ar: 'قيد المراجعة', en: 'Pending' },
  cr_approved:     { ar: 'مقبول', en: 'Approved' },
  cr_rejected:     { ar: 'مرفوض', en: 'Rejected' },

  // Documents + cancellation policy (client portal)
  my_documents:    { ar: 'مستنداتي', en: 'My documents' },
  doc_contract:    { ar: 'العقد', en: 'Contract' },
  doc_proposal:    { ar: 'العرض', en: 'Proposal' },
  doc_beo:         { ar: 'أمر التشغيل', en: 'Event order' },
  doc_run_sheet:   { ar: 'جدول التشغيل', en: 'Run sheet' },
  doc_visit_summary: { ar: 'ملخص الزيارة', en: 'Visit summary' },
  view:            { ar: 'عرض', en: 'View' },
  accepted:        { ar: 'مقبول', en: 'Accepted' },
  accept_contract: { ar: 'قبول العقد', en: 'Accept contract' },
  cancellation_policy: { ar: 'سياسة الإلغاء', en: 'Cancellation policy' },
  within_days:     { ar: 'خلال {n} يوم من المناسبة', en: 'Within {n} days of the event' },
  retained:        { ar: 'تُحتجَز', en: 'retained' },

  total:   { ar: 'الإجمالي', en: 'Total' },
  currency:{ ar: 'ج.م', en: 'EGP' },
  processing: { ar: 'جارٍ المعالجة…', en: 'Processing…' },
};

@Injectable({ providedIn: 'root' })
export class LangService {
  readonly lang = signal<Lang>('ar');

  constructor() {
    this.apply(this.lang());
  }

  t(key: string): string {
    const e = DICT[key];
    return e ? e[this.lang()] : key;
  }

  money(n: number): string {
    const locale = this.lang() === 'ar' ? 'ar-EG' : 'en-EG';
    return new Intl.NumberFormat(locale).format(n || 0) + ' ' + this.t('currency');
  }

  toggle(): void {
    this.set(this.lang() === 'ar' ? 'en' : 'ar');
  }

  set(l: Lang): void {
    this.lang.set(l);
    this.apply(l);
  }

  private apply(l: Lang): void {
    const html = document.documentElement;
    html.lang = l;
    html.dir = l === 'ar' ? 'rtl' : 'ltr';
  }
}
