/**
 * Sector AI Context Configuration
 *
 * Defines per-sector AI guidance for all 12 sectors. Used by the WhatsApp AI
 * engine and voice agent system to provide domain-appropriate responses.
 *
 * Usage:
 *   import { getSectorAIContext } from '@/lib/config/sector-ai-context';
 *   const ctx = getSectorAIContext('health_care');
 */

// ── Types ─────────────────────────────────────────────────────────────────

export interface SectorAIContext {
  transactionNoun: { en: string; ar: string };
  domainVocabulary: { en: string[]; ar: string[] };
  bookingFlowHints: { en: string; ar: string };
  extraFieldsToCollect: string[]; // keys matching sector-custom-fields
  exampleDialogue: { en: string; ar: string };
}

// ── Config ────────────────────────────────────────────────────────────────

export const SECTOR_AI_CONTEXTS: Record<string, SectorAIContext> = {
  health_care: {
    transactionNoun: { en: "appointment", ar: "موعد" },
    domainVocabulary: {
      en: [
        "doctor",
        "specialist",
        "consultation",
        "clinic",
        "prescription",
        "diagnosis",
        "patient",
        "referral",
        "checkup",
        "follow-up",
      ],
      ar: [
        "طبيب",
        "أخصائي",
        "استشارة",
        "عيادة",
        "وصفة طبية",
        "تشخيص",
        "مريض",
        "تحويل",
        "فحص",
        "متابعة",
      ],
    },
    bookingFlowHints: {
      en: "IMPORTANT CLINIC BOOKING FLOW: 1) Patient describes their health complaint. 2) Look at APPOINTMENT TYPES AVAILABLE and pick the most relevant service. Say: 'I can book you for a [Service Name] ([duration] - [price] QAR). What day and time works best for you?' — use the EXACT service name, duration, and price from the list. 3) Once they give date/time, confirm their name (skip if already known). 4) Confirm booking details and send payment link. NEVER make up service names — only use services from the APPOINTMENT TYPES AVAILABLE list.",
      ar: "تدفق حجز العيادة المهم: 1) يصف المريض شكواه الصحية. 2) انظر في قائمة أنواع المواعيد المتاحة واختر الخدمة الأنسب. قل: 'أقدر أحجز لك [اسم الخدمة] ([المدة] - [السعر] ريال قطري). شنو اليوم والوقت المناسب لك؟' — استخدم اسم الخدمة والمدة والسعر بالضبط من القائمة. 3) بعد اليوم والوقت، تأكد من اسمهم (تجاوز هذه الخطوة إذا كان الاسم معروفاً). 4) أكد تفاصيل الحجز وأرسل رابط الدفع. لا تخترع أسماء خدمات أبداً — استخدم فقط الخدمات من قائمة أنواع المواعيد المتاحة.",
    },
    extraFieldsToCollect: ["complaint", "doctor_specialist", "department"],
    exampleDialogue: {
      en: 'Patient: "I want to book an appointment."\nAgent: "Of course! Could you tell me what the issue is or describe your symptoms? That way I can recommend the best service for you."\nPatient: "I have tooth pain."\nAgent: "I\'m sorry to hear that. Based on your tooth pain, I\'d recommend our Dental Consultation. Shall I book that for you? What date works best?"',
      ar: 'المريض: "أبي أحجز موعد."\nالوكيل: "بكل سرور! ممكن تخبرني ما هي مشكلتك أو ما هي الأعراض؟ حتى أقدر أنصحك بأفضل خدمة لحالتك."\nالمريض: "عندي ألم في الأسنان."\nالوكيل: "آسف لسماع ذلك. بناءً على ألم الأسنان، أنصح باستشارة طب الأسنان. هل تريد أحجز لك؟ ما هو التاريخ المناسب؟"',
    },
  },

  beauty_wellness: {
    transactionNoun: { en: "appointment", ar: "موعد" },
    domainVocabulary: {
      en: [
        "stylist",
        "treatment",
        "service",
        "facial",
        "haircut",
        "massage",
        "manicure",
        "pedicure",
        "colour",
        "blow-dry",
      ],
      ar: [
        "مصفف",
        "علاج",
        "خدمة",
        "فيشل",
        "قص شعر",
        "مساج",
        "مناكير",
        "باديكير",
        "صبغة",
        "سشوار",
      ],
    },
    bookingFlowHints: {
      en: "Ask which service they want, stylist preference, whether they have any allergies or sensitivities, and preferred date/time.",
      ar: "اسأل عن الخدمة المطلوبة، تفضيل المصفف/المعالج، إذا عندهم حساسية، والتاريخ والوقت المفضل.",
    },
    extraFieldsToCollect: ["stylist_therapist", "treatment_area"],
    exampleDialogue: {
      en: 'Client: "I want to book a haircut and colour."\nAgent: "Great choice! Do you have a preferred stylist? And which date and time work for you?"',
      ar: 'العميلة: "أبي أحجز قص شعر وصبغة."\nالوكيل: "اختيار حلو! عندج مصففة معينة تفضلينها؟ وشنو التاريخ والوقت اللي يناسبج؟"',
    },
  },

  food_hospitality: {
    transactionNoun: { en: "reservation", ar: "حجز" },
    domainVocabulary: {
      en: [
        "table",
        "party",
        "menu",
        "dietary",
        "chef's special",
        "reservation",
        "guests",
        "course",
        "allergies",
        "outdoor",
      ],
      ar: [
        "طاولة",
        "مجموعة",
        "قائمة الطعام",
        "غذائي",
        "طبق الشيف",
        "حجز",
        "ضيوف",
        "وجبة",
        "حساسية",
        "خارجي",
      ],
    },
    bookingFlowHints: {
      en: "Ask party size, preferred date/time, dietary requirements, any special occasion, and seating preference.",
      ar: "اسأل عن عدد الأشخاص، التاريخ والوقت المفضل، المتطلبات الغذائية، مناسبة خاصة، وتفضيل الجلسة.",
    },
    extraFieldsToCollect: [
      "party_size",
      "dietary_requirements",
      "special_occasion",
    ],
    exampleDialogue: {
      en: 'Guest: "I\'d like to book a table for 4 this Friday."\nAgent: "Wonderful! What time would you prefer? And do any of your guests have dietary requirements or allergies?"',
      ar: 'الضيف: "أبي أحجز طاولة لـ٤ أشخاص يوم الجمعة."\nالوكيل: "تمام! شنو الوقت اللي تفضله؟ وهل أحد من الضيوف عنده متطلبات غذائية أو حساسية؟"',
    },
  },

  retail_services: {
    transactionNoun: { en: "consultation", ar: "استشارة" },
    domainVocabulary: {
      en: [
        "consultant",
        "meeting",
        "case",
        "review",
        "advice",
        "assessment",
        "inquiry",
        "proposal",
        "contract",
        "follow-up",
      ],
      ar: [
        "مستشار",
        "اجتماع",
        "قضية",
        "مراجعة",
        "نصيحة",
        "تقييم",
        "استفسار",
        "عرض",
        "عقد",
        "متابعة",
      ],
    },
    bookingFlowHints: {
      en: "Ask the nature of the inquiry, preferred consultant if any, urgency level, and preferred date/time.",
      ar: "اسأل عن طبيعة الاستفسار، المستشار المفضل إن وجد، مستوى الاستعجال، والتاريخ والوقت المفضل.",
    },
    extraFieldsToCollect: ["consultant", "service_category"],
    exampleDialogue: {
      en: 'Client: "I need a consultation about my business insurance."\nAgent: "Certainly! I can help you schedule that. Do you have a preferred consultant, and when would you like to come in?"',
      ar: 'العميل: "أبي استشارة بخصوص تأمين شركتي."\nالوكيل: "أكيد! أقدر أساعدك تحجز موعد. عندك مستشار معين تفضله، ومتى تبي تجي؟"',
    },
  },

  property_facilities: {
    transactionNoun: { en: "viewing", ar: "معاينة" },
    domainVocabulary: {
      en: [
        "property",
        "villa",
        "apartment",
        "viewing",
        "bedrooms",
        "location",
        "rent",
        "sale",
        "agent",
        "listing",
      ],
      ar: [
        "عقار",
        "فيلا",
        "شقة",
        "معاينة",
        "غرف نوم",
        "موقع",
        "إيجار",
        "بيع",
        "وكيل",
        "إعلان",
      ],
    },
    bookingFlowHints: {
      en: "Ask property type preference, preferred area/district, budget range, number of bedrooms, and whether for rent or purchase.",
      ar: "اسأل عن نوع العقار المفضل، المنطقة المفضلة، نطاق الميزانية، عدد غرف النوم، وإذا للإيجار أو الشراء.",
    },
    extraFieldsToCollect: ["property_address", "property_type", "bedrooms"],
    exampleDialogue: {
      en: 'Client: "I want to view some 3-bedroom villas in The Pearl."\nAgent: "Excellent! We have several options in The Pearl. When would you like to schedule the viewing? Do you have a budget range in mind?"',
      ar: 'العميل: "أبي أشوف فلل ٣ غرف نوم في اللؤلؤة."\nالوكيل: "ممتاز! عندنا خيارات وايد في اللؤلؤة. متى تبي تحدد موعد المعاينة؟ عندك ميزانية معينة؟"',
    },
  },

  mobility_automotive: {
    transactionNoun: { en: "rental", ar: "إيجار" },
    domainVocabulary: {
      en: [
        "vehicle",
        "car",
        "pickup",
        "return",
        "model",
        "insurance",
        "SUV",
        "sedan",
        "chauffeur",
        "mileage",
      ],
      ar: [
        "مركبة",
        "سيارة",
        "استلام",
        "إرجاع",
        "موديل",
        "تأمين",
        "دفع رباعي",
        "سيدان",
        "سائق",
        "كيلومترات",
      ],
    },
    bookingFlowHints: {
      en: "Ask vehicle type, pickup and return dates, pickup location, insurance preference, and driver requirements.",
      ar: "اسأل عن نوع المركبة، تواريخ الاستلام والإرجاع، موقع الاستلام، تفضيل التأمين، ومتطلبات السائق.",
    },
    extraFieldsToCollect: ["vehicle_type", "pickup_location", "return_date"],
    exampleDialogue: {
      en: 'Customer: "I need to rent an SUV for next week."\nAgent: "Sure! When would you like to pick it up and return it? Do you need airport pickup, and would you like full insurance coverage?"',
      ar: 'العميل: "أبي أستأجر سيارة دفع رباعي الأسبوع الجاي."\nالوكيل: "تمام! متى تبي تستلمها وترجعها؟ تبيها من المطار؟ وتبي تأمين شامل؟"',
    },
  },

  home_services_trades: {
    transactionNoun: { en: "job", ar: "مهمة" },
    domainVocabulary: {
      en: [
        "repair",
        "installation",
        "plumbing",
        "electrical",
        "emergency",
        "maintenance",
        "AC",
        "painting",
        "carpentry",
        "cleaning",
      ],
      ar: [
        "إصلاح",
        "تركيب",
        "سباكة",
        "كهرباء",
        "طوارئ",
        "صيانة",
        "تكييف",
        "دهان",
        "نجارة",
        "تنظيف",
      ],
    },
    bookingFlowHints: {
      en: "Ask the type of work needed, the service address, urgency (routine or emergency), and a brief description of the issue.",
      ar: "اسأل عن نوع العمل المطلوب، عنوان الخدمة، مدى الاستعجال (عادي أو طوارئ)، ووصف مختصر للمشكلة.",
    },
    extraFieldsToCollect: ["service_address", "issue_description"],
    exampleDialogue: {
      en: 'Customer: "My AC unit stopped cooling."\nAgent: "I\'m sorry to hear that! Can you share the service address? Is this an emergency, or can we schedule a technician within the next day or two?"',
      ar: 'العميل: "المكيف عندي وقف يبرد."\nالوكيل: "آسف على الإزعاج! ممكن تعطيني العنوان؟ هل الموضوع طوارئ ولا نقدر نجدول فني خلال يوم أو يومين؟"',
    },
  },

  education: {
    transactionNoun: { en: "enrolment", ar: "تسجيل" },
    domainVocabulary: {
      en: [
        "course",
        "class",
        "tutor",
        "level",
        "schedule",
        "exam",
        "semester",
        "grade",
        "certificate",
        "workshop",
      ],
      ar: [
        "دورة",
        "فصل",
        "مدرس",
        "مستوى",
        "جدول",
        "امتحان",
        "فصل دراسي",
        "درجة",
        "شهادة",
        "ورشة",
      ],
    },
    bookingFlowHints: {
      en: "Ask which course or subject, the student's current level, preferred schedule, and whether they need assessment first.",
      ar: "اسأل عن الدورة أو المادة، مستوى الطالب الحالي، الجدول المفضل، وإذا يحتاج تقييم أولي.",
    },
    extraFieldsToCollect: ["course_subject", "level"],
    exampleDialogue: {
      en: 'Student: "I want to sign up for an English course."\nAgent: "Welcome! What is your current English level? We offer beginner, intermediate, and advanced courses. When would you like to start?"',
      ar: 'الطالب: "أبي أسجل في دورة إنجليزي."\nالوكيل: "أهلاً! شنو مستواك الحالي في الإنجليزي؟ عندنا مستوى مبتدئ ومتوسط ومتقدم. متى تبي تبدأ؟"',
    },
  },

  events_venues: {
    transactionNoun: { en: "event booking", ar: "حجز فعالية" },
    domainVocabulary: {
      en: [
        "venue",
        "guests",
        "catering",
        "decoration",
        "setup",
        "capacity",
        "sound system",
        "stage",
        "parking",
        "outdoor",
      ],
      ar: [
        "مكان",
        "ضيوف",
        "تقديم طعام",
        "ديكور",
        "تجهيز",
        "سعة",
        "نظام صوت",
        "مسرح",
        "مواقف",
        "خارجي",
      ],
    },
    bookingFlowHints: {
      en: "Ask the event type, preferred date, expected guest count, venue preference (indoor/outdoor), and any special requirements.",
      ar: "اسأل عن نوع الفعالية، التاريخ المفضل، عدد الضيوف المتوقع، تفضيل المكان (داخلي/خارجي)، وأي متطلبات خاصة.",
    },
    extraFieldsToCollect: ["event_type", "guest_count", "venue_preference"],
    exampleDialogue: {
      en: 'Client: "We need a venue for a wedding reception, about 200 guests."\nAgent: "Congratulations! When is the wedding date? Do you prefer an indoor or outdoor venue? I can check availability for you."',
      ar: 'العميل: "نبي مكان لحفل زواج، تقريباً ٢٠٠ شخص."\nالوكيل: "مبروك! متى تاريخ الزواج؟ تفضلون مكان داخلي ولا خارجي؟ أقدر أشيك لكم على المتوفر."',
    },
  },

  pet_services: {
    transactionNoun: { en: "appointment", ar: "موعد" },
    domainVocabulary: {
      en: [
        "pet",
        "grooming",
        "vaccination",
        "checkup",
        "breed",
        "vet",
        "boarding",
        "training",
        "walk",
        "diet",
      ],
      ar: [
        "حيوان أليف",
        "تجميل",
        "تطعيم",
        "فحص",
        "سلالة",
        "بيطري",
        "إيواء",
        "تدريب",
        "تمشية",
        "غذاء",
      ],
    },
    bookingFlowHints: {
      en: "Ask the pet type and name, the service needed, any health concerns, and preferred date/time.",
      ar: "اسأل عن نوع الحيوان واسمه، الخدمة المطلوبة، أي مخاوف صحية، والتاريخ والوقت المفضل.",
    },
    extraFieldsToCollect: ["pet_type", "pet_name", "pet_weight"],
    exampleDialogue: {
      en: 'Owner: "I need to get my dog groomed."\nAgent: "Of course! What\'s your dog\'s name? Do you have any preferences for the grooming style? When would you like to bring them in?"',
      ar: 'صاحب الحيوان: "أبي أحجز تجميل لكلبي."\nالوكيل: "أكيد! شنو اسم الكلب؟ عندك تفضيل معين لقصة الشعر؟ ومتى تقدر تجيبه؟"',
    },
  },

  nonprofit_community: {
    transactionNoun: { en: "appointment", ar: "موعد" },
    domainVocabulary: {
      en: [
        "program",
        "volunteer",
        "community",
        "outreach",
        "participant",
        "workshop",
        "session",
        "registration",
        "donation",
        "event",
      ],
      ar: [
        "برنامج",
        "متطوع",
        "مجتمع",
        "توعية",
        "مشارك",
        "ورشة",
        "جلسة",
        "تسجيل",
        "تبرع",
        "فعالية",
      ],
    },
    bookingFlowHints: {
      en: "Ask which program or activity, number of participants, any special needs or accommodations, and preferred schedule.",
      ar: "اسأل عن البرنامج أو النشاط، عدد المشاركين، أي احتياجات خاصة، والجدول المفضل.",
    },
    extraFieldsToCollect: ["program_name", "participant_count"],
    exampleDialogue: {
      en: 'Caller: "I want to register my kids for the youth program."\nAgent: "That\'s wonderful! How many children would you like to register? Do they have any special needs we should know about? What schedule works best for your family?"',
      ar: 'المتصل: "أبي أسجل عيالي في برنامج الشباب."\nالوكيل: "حياك! كم طفل تبي تسجل؟ عندهم أي احتياجات خاصة لازم نعرفها؟ وشنو الجدول اللي يناسبكم؟"',
    },
  },

  public_sector: {
    transactionNoun: { en: "appointment", ar: "موعد" },
    domainVocabulary: {
      en: [
        "service",
        "permit",
        "license",
        "registration",
        "document",
        "application",
        "reference number",
        "ID",
        "form",
        "fee",
      ],
      ar: [
        "خدمة",
        "تصريح",
        "ترخيص",
        "تسجيل",
        "مستند",
        "طلب",
        "رقم مرجعي",
        "هوية",
        "نموذج",
        "رسوم",
      ],
    },
    bookingFlowHints: {
      en: "Ask the service type, whether they have an existing reference number, what documents they need to bring, and preferred date/time.",
      ar: "اسأل عن نوع الخدمة، إذا عندهم رقم مرجعي موجود، شنو المستندات المطلوبة، والتاريخ والوقت المفضل.",
    },
    extraFieldsToCollect: ["service_type", "reference_number"],
    exampleDialogue: {
      en: 'Citizen: "I need to renew my commercial license."\nAgent: "Certainly. Do you have your current license number or reference number? I\'ll schedule an appointment. Please bring your original ID and the current license."',
      ar: 'المواطن: "أبي أجدد الرخصة التجارية."\nالوكيل: "أكيد. عندك رقم الرخصة الحالية أو الرقم المرجعي؟ بحجز لك موعد. لا تنسى تجيب الهوية الأصلية والرخصة الحالية."',
    },
  },
};

// ── Helper ────────────────────────────────────────────────────────────────

/**
 * Return the AI context for a given sector key.
 * Returns null for unknown or unconfigured sectors.
 */
export function getSectorAIContext(
  sectorKey: string | null | undefined,
): SectorAIContext | null {
  if (!sectorKey) return null;
  return SECTOR_AI_CONTEXTS[sectorKey] ?? null;
}
