/**
 * src/onboarding/industries.ts
 * قوالب جاهزة حسب القطاع — Industry-specific templates
 * Includes "Other" for custom businesses + Graphiti integration hooks
 */
import { createChildLogger } from '../utils/logger.js';
import { writeWorkspaceFile } from '../tenants/workspace.js';
const log = createChildLogger('onboarding:industries');
// ─── Industry Definitions ────────────────────────────────────────────
const INDUSTRIES = [
    // Real Estate
    {
        id: 'real_estate',
        name: 'Real Estate',
        name_ar: 'العقارات',
        skills: [
            {
                name: 'property_inquiry',
                name_ar: 'استفسار عقاري',
                description: 'Handle property questions — location, price, size, features',
                trigger_keywords: ['شقة', 'فيلا', 'أرض', 'عقار', 'سعر', 'مساحة', 'موقع', 'property', 'apartment', 'villa'],
            },
            {
                name: 'booking_viewing',
                name_ar: 'حجز معاينة',
                description: 'Schedule property viewings and site visits',
                trigger_keywords: ['معاينة', 'زيارة', 'موعد', 'أشوف', 'viewing', 'visit', 'schedule'],
            },
            {
                name: 'qualify_lead',
                name_ar: 'تأهيل العميل',
                description: 'Qualify buyer — budget, timeline, preferences, financing needs',
                trigger_keywords: ['ميزانية', 'تمويل', 'قرض', 'budget', 'financing', 'mortgage'],
            },
        ],
        products_template: `# العقارات المتاحة
## مثال — مشروع [اسم المشروع]
### شقة نموذج A
- **الموقع:** [الحي]، [المدينة]
- **المساحة:** 150 م²
- **الغرف:** 3 غرف نوم + صالة + مطبخ
- **السعر:** 850,000 ريال
- **التمويل:** متاح عبر [البنك]
- **الميزات:** موقف سيارة، مصعد، حديقة
- **الحالة:** متاح

<!-- أضف عقاراتك هنا بنفس التنسيق -->`,
        processes_template: `# العمليات والإجراءات — عقارات
## استفسار عقاري
1. اسأل عن نوع العقار المطلوب (شقة/فيلا/أرض)
2. اسأل عن المدينة والحي المفضل
3. اسأل عن الميزانية
4. اعرض الخيارات المتاحة من PRODUCTS.md
5. اقترح حجز معاينة

## حجز معاينة
1. تأكد من اهتمام العميل بعقار محدد
2. اسأل عن الوقت المناسب
3. أكد الموعد وأرسل تفاصيل الموقع
4. ذكّر العميل قبل الموعد بيوم

## تأهيل العميل
1. اسأل: هل تبحث عن سكن أو استثمار؟
2. اسأل: ما ميزانيتك التقريبية؟
3. اسأل: هل تحتاج تمويل عقاري؟
4. اسأل: ما الجدول الزمني للشراء؟
5. صنّف العميل: ساخن / دافئ / بارد`,
        soul_additions: `## تعليمات خاصة بالعقارات
- استخدم مصطلحات عقارية مهنية
- أكد دائماً على الموقع والمساحة والسعر
- اذكر خيارات التمويل إذا كانت متاحة
- لا تعط أسعار غير محدثة — حوّل للفريق إذا لم تكن متأكداً`,
    },
    // Contracting
    {
        id: 'contracting',
        name: 'Contracting & Construction',
        name_ar: 'المقاولات والإنشاءات',
        skills: [
            {
                name: 'project_inquiry',
                name_ar: 'استفسار مشروع',
                description: 'Handle project questions — scope, timeline, budget, materials',
                trigger_keywords: ['بناء', 'تشييد', 'مقاولات', 'مشروع', 'تصميم', 'هندسة', 'construction', 'building', 'contractor'],
            },
            {
                name: 'quote_request',
                name_ar: 'طلب عرض سعر',
                description: 'Collect project details to generate a quote',
                trigger_keywords: ['سعر', 'عرض', 'تكلفة', 'ميزانية', 'quote', 'estimate', 'cost'],
            },
            {
                name: 'schedule_consultation',
                name_ar: 'حجز استشارة',
                description: 'Schedule site visit or design consultation',
                trigger_keywords: ['معاينة', 'زيارة', 'استشارة', 'موعد', 'site visit', 'consultation'],
            },
            {
                name: 'track_progress',
                name_ar: 'متابعة التقدم',
                description: 'Update client on project progress and milestones',
                trigger_keywords: ['تقدم', 'حالة', 'جاري العمل', 'progress', 'status', 'update'],
            },
        ],
        products_template: `# خدماتنا و مشاريعنا
## خدمات المقاولات
### بناء فيلا سكنية
- **النطاق:** تصميم وتنفيذ كامل
- **المدة التقريبية:** 8-12 شهراً
- **التكلفة التقريبية:** تبدأ من 2.5 مليون ريال
- **المواد:** طوب خرساني، عزل حراري، تشطيب فاخر
- **الضمان:** 5 سنوات على الهيكل، سنة على التشطيب

### بناء مجمع تجاري
- **النطاق:** تصميم هندسي، إنشاء، تشطيب
- **المدة التقريبية:** 12-18 شهراً
- **التكلفة التقريبية:** حسب المساحة والتصميم
- **الميزات:** مواقف، أنظمة ذكية، توفير طاقة

### ترميم وتطوير
- **النطاق:** ترميم كامل أو جزئي
- **المدة:** حسب حجم المشروع
- **التكلفة:** حسب الميزانية المتاحة

<!-- أضف مشاريعك هنا -->`,
        processes_template: `# العمليات والإجراءات — مقاولات
## استفسار مشروع
1. اسأل عن نوع المشروع (فيلا، تجاري، صناعي، ترميم)
2. اسأل عن الموقع والمساحة
3. اسأل عن الميزانية التقريبية
4. اسأل عن الجدول الزمني المطلوب
5. اطلب المخططات إن وجدت
6. اقترح حجز معاينة موقع

## طلب عرض سعر
1. تأكد من جميع تفاصيل المشروع
2. اسأل عن المواد المفضلة (عالية الجودة، اقتصادية، إلخ)
3. اسأل عن الأولويات (السعر، الجودة، السرعة)
4. اشرح أن العرض النهائي يحتاج معاينة موقع
5. احجز موعد معاينة

## متابعة التقدم
1. اسأل عن رقم المشروع أو اسم العميل
2. أبلغ عن آخر مرحلة تم إنجازها
3. اذكر المواعيد القادمة
4. أبلغ عن أي تأخيرات أو تغييرات
5. قدم صورة حديثة إن توفرت

## تحويل للفريق
1. عندما يطلب العميل عرض سعر دقيق بدون معاينة
2. عندما يحتاج مفاوضات معقدة
3. عندما يطلب تعديلات كبيرة على التصميم
4. عندما يكون العميل جاهزاً للتوقيع`,
        soul_additions: `## تعليمات خاصة بالمقاولات
- كن واقعياً في التوقعات (المدة، التكلفة، الجودة)
- شدد على أهمية المعاينة قبل تقديم عرض دقيق
- استخدم مصطلحات هندسية ومقاولاتية صحيحة
- اذكر الضمانات ومعايير الجودة بوضوح
- لا تعد بأشياء خارج نطاق العقد
- ذكّر العميل بأن الأسعار تتغير حسب المواد والسوق
- كن ودوداً واحترافياً، فمشاريع البناء طويلة الأمد وتحتاج ثقة`,
    },
    // Restaurant / Food & Beverage
    {
        id: 'restaurant',
        name: 'Restaurant & Café',
        name_ar: 'مطاعم وكافيهات',
        skills: [
            { name: 'menu_inquiry', name_ar: 'استفسار عن المنيو', description: 'Menu, prices, dietary options', trigger_keywords: ['منيو', 'قائمة', 'سعر', 'وجبة', 'menu', 'price'] },
            { name: 'reservation', name_ar: 'حجز طاولة', description: 'Table reservations + waitlist', trigger_keywords: ['حجز', 'طاولة', 'موعد', 'reservation', 'table'] },
            { name: 'delivery_order', name_ar: 'طلب توصيل', description: 'Delivery orders, address, payment', trigger_keywords: ['توصيل', 'طلب', 'delivery', 'order'] },
        ],
        products_template: `# قائمة الطعام
<!-- أضف الأصناف والأسعار -->`,
        processes_template: `# عمليات المطعم
<!-- ساعات العمل، التوصيل، الحجوزات -->`,
        soul_additions: `## ملاحظات المطعم
- تعامل مع الطلبات بسرعة ودقة
- اذكر مكونات الحساسية الغذائية عند الطلب
- كن ودوداً وضيافياً`,
    },
    // Healthcare / Clinics
    {
        id: 'healthcare',
        name: 'Healthcare & Clinics',
        name_ar: 'صحة وعيادات',
        skills: [
            { name: 'appointment', name_ar: 'حجز موعد', description: 'Schedule appointments, doctor preference', trigger_keywords: ['موعد', 'دكتور', 'طبيب', 'appointment', 'doctor'] },
            { name: 'services_inquiry', name_ar: 'استفسار خدمات', description: 'Services, prices, insurance coverage', trigger_keywords: ['خدمة', 'سعر', 'تأمين', 'service', 'insurance'] },
            { name: 'medical_records', name_ar: 'سجل طبي', description: 'Lab results, prescriptions, follow-up', trigger_keywords: ['تحاليل', 'وصفة', 'متابعة', 'results', 'prescription'] },
        ],
        products_template: `# الخدمات الطبية المقدمة
<!-- أضف التخصصات والإجراءات -->`,
        processes_template: `# العمليات السريرية
<!-- ساعات العمل، الحجز، المتابعة -->`,
        soul_additions: `## آداب التعامل الطبي
- احترم خصوصية المريض دائماً (PDPL + قانون الخصوصية الصحية)
- لا تشخّص أو تصف دواء — وجّه دائماً للطبيب المختص
- كن متعاطفاً ومحترماً، خصوصاً مع الحالات العاجلة`,
    },
    // E-commerce / Retail
    {
        id: 'ecommerce',
        name: 'E-commerce & Retail',
        name_ar: 'تجارة إلكترونية وتجزئة',
        skills: [
            { name: 'product_inquiry', name_ar: 'استفسار منتج', description: 'Product details, stock, variants', trigger_keywords: ['منتج', 'متوفر', 'مقاس', 'لون', 'product', 'stock'] },
            { name: 'order_tracking', name_ar: 'تتبع طلب', description: 'Track orders, shipping status', trigger_keywords: ['طلبي', 'تتبع', 'شحن', 'order', 'tracking'] },
            { name: 'returns', name_ar: 'استرجاع', description: 'Returns, refunds, exchanges', trigger_keywords: ['استرجاع', 'استبدال', 'return', 'refund'] },
        ],
        products_template: `# كاتالوج المنتجات
<!-- أضف منتجاتك مع SKU + سعر + مخزون -->`,
        processes_template: `# عمليات المتجر
<!-- الشحن، الاسترجاع، طرق الدفع -->`,
        soul_additions: `## ملاحظات التجارة
- اذكر الأسعار شاملة ضريبة القيمة المضافة (15%)
- اذكر مدة التوصيل بوضوح
- لا تعد بمخزون قد لا يكون متوفراً`,
    },
    // Auto Sales / Workshop
    {
        id: 'auto',
        name: 'Auto Sales & Workshop',
        name_ar: 'سيارات وورش',
        skills: [
            { name: 'car_inquiry', name_ar: 'استفسار سيارة', description: 'Car specs, prices, financing', trigger_keywords: ['سيارة', 'موديل', 'سعر', 'تقسيط', 'car', 'price'] },
            { name: 'service_booking', name_ar: 'حجز صيانة', description: 'Service appointments, diagnostics', trigger_keywords: ['صيانة', 'كشف', 'موعد', 'service', 'maintenance'] },
            { name: 'spare_parts', name_ar: 'قطع غيار', description: 'Spare parts availability + pricing', trigger_keywords: ['قطعة', 'غيار', 'parts', 'spare'] },
        ],
        products_template: `# السيارات والخدمات
<!-- أضف الموديلات + خدمات الورشة -->`,
        processes_template: `# عمليات الورشة
<!-- التشخيص، التسعير، الضمان -->`,
        soul_additions: `## ملاحظات قطاع السيارات
- اذكر الضمان والكفالة بوضوح
- التسعير الدقيق يتطلب فحص — قدّر فقط من فوق
- كن صادقاً عن مدة الإصلاح`,
    },
    // Beauty / Salon
    {
        id: 'beauty',
        name: 'Beauty & Salon',
        name_ar: 'تجميل وصالونات',
        skills: [
            { name: 'service_inquiry', name_ar: 'استفسار خدمة', description: 'Services, prices, packages', trigger_keywords: ['خدمة', 'سعر', 'باقة', 'service', 'package'] },
            { name: 'booking', name_ar: 'حجز موعد', description: 'Stylist bookings, time slots', trigger_keywords: ['موعد', 'حجز', 'وقت', 'booking', 'appointment'] },
            { name: 'consultation', name_ar: 'استشارة', description: 'Skin, hair, or treatment consultations', trigger_keywords: ['استشارة', 'نصيحة', 'consultation', 'advice'] },
        ],
        products_template: `# خدمات الصالون
<!-- أضف الخدمات + الأسعار + المدة -->`,
        processes_template: `# عمليات الصالون
<!-- الحجوزات، الإلغاء، البرامج -->`,
        soul_additions: `## ملاحظات قطاع التجميل
- احترم خصوصية العميلات
- كن ودوداً ومهنياً
- اذكر المنتجات المستخدمة عند الطلب`,
    },
    // Education / Training
    {
        id: 'education',
        name: 'Education & Training',
        name_ar: 'تعليم وتدريب',
        skills: [
            { name: 'course_inquiry', name_ar: 'استفسار دورة', description: 'Courses, schedules, prices, certificates', trigger_keywords: ['دورة', 'كورس', 'برنامج', 'course', 'training'] },
            { name: 'enrollment', name_ar: 'تسجيل', description: 'Enrollment, payments, prerequisites', trigger_keywords: ['تسجيل', 'اشتراك', 'enroll', 'register'] },
            { name: 'certification', name_ar: 'شهادات', description: 'Certificate issuance, accreditation queries', trigger_keywords: ['شهادة', 'اعتماد', 'certificate'] },
        ],
        products_template: `# الدورات والبرامج
<!-- أضف البرامج، المدة، الأسعار، الشهادات -->`,
        processes_template: `# عمليات التعليم
<!-- التسجيل، الجداول، التقييم -->`,
        soul_additions: `## ملاحظات قطاع التعليم
- اذكر متطلبات الالتحاق بوضوح
- وضّح طبيعة الشهادة (معتمدة من أي جهة)
- كن صبوراً مع الاستفسارات`,
    },
    // Consulting / Marketing
    {
        id: 'consulting',
        name: 'Consulting & Marketing',
        name_ar: 'استشارات وتسويق',
        skills: [
            { name: 'service_inquiry', name_ar: 'استفسار خدمة', description: 'Service scope, pricing, timeline', trigger_keywords: ['خدمة', 'استشارة', 'تسعيرة', 'service', 'pricing'] },
            { name: 'proposal_request', name_ar: 'طلب عرض', description: 'Proposals, scope of work', trigger_keywords: ['عرض', 'دراسة', 'proposal', 'quote'] },
            { name: 'case_study', name_ar: 'دراسة حالة', description: 'Past work, results, case studies', trigger_keywords: ['نتائج', 'سابق', 'case', 'portfolio'] },
        ],
        products_template: `# الخدمات الاستشارية
<!-- أضف خدمات الاستشارة والتسويق -->`,
        processes_template: `# عمليات الاستشارات
<!-- مراحل المشروع، التقارير، التواصل -->`,
        soul_additions: `## ملاحظات قطاع الاستشارات
- لا تَعِد بنتائج غير قابلة للقياس
- اطلب موجزاً واضحاً قبل التسعير
- اعتمد البيانات لا التخمين`,
    },
    // Logistics / Shipping
    {
        id: 'logistics',
        name: 'Logistics & Shipping',
        name_ar: 'لوجستيات وشحن',
        skills: [
            { name: 'shipping_inquiry', name_ar: 'استفسار شحن', description: 'Shipping options, costs, durations', trigger_keywords: ['شحن', 'توصيل', 'shipping', 'delivery'] },
            { name: 'track_shipment', name_ar: 'تتبع شحنة', description: 'Track shipments, status updates', trigger_keywords: ['تتبع', 'شحنة', 'tracking', 'status'] },
            { name: 'quote_request', name_ar: 'طلب عرض شحن', description: 'Quote requests for freight', trigger_keywords: ['عرض', 'تسعيرة', 'quote'] },
        ],
        products_template: `# خدمات الشحن
<!-- المسارات، التعرفة، الوقت -->`,
        processes_template: `# عمليات الشحن
<!-- التغليف، التأمين، التخليص الجمركي -->`,
        soul_additions: `## ملاحظات اللوجستيات
- التزم بالمواعيد المعلنة
- اذكر التغطية الجغرافية بوضوح
- وضّح التأمين والمسؤولية`,
    },
    // OTHER (Custom)
    {
        id: 'other',
        name: 'Other (Custom Business)',
        name_ar: 'آخر (تخصيص كامل)',
        is_custom: true,
        skills: [], // Will be generated dynamically based on custom description
        products_template: `# منتجات وخدمات [اسم العمل]
<!-- تم إنشاء هذا القالب تلقائياً بناءً على وصفك المخصص -->
<!-- أضف منتجاتك أو خدماتك هنا -->`,
        processes_template: `# العمليات والإجراءات — [اسم العمل]
<!-- تم إنشاء هذا القالب تلقائياً بناءً على وصفك المخصص -->
<!-- أضف إجراءات عملك هنا -->`,
        soul_additions: `## تعليمات مخصصة
<!-- تم إنشاء هذا القسم بناءً على وصفك المخصص -->`,
    },
];
// ─── Public API ──────────────────────────────────────────────────────
export function listIndustries() {
    return INDUSTRIES.map(({ id, name, name_ar, is_custom }) => ({
        id,
        name,
        name_ar,
        is_custom: is_custom || false,
    }));
}
export function getIndustryTemplate(id) {
    const found = INDUSTRIES.find(i => i.id === id);
    if (!found)
        return null;
    return { ...found }; // Return a copy
}
/**
 * Apply industry template to tenant workspace
 * If "other", use dynamic data from custom fields
 */
export async function applyIndustryTemplate(tenantId, industryId, customData) {
    const template = getIndustryTemplate(industryId);
    if (!template) {
        log.error({ tenantId, industryId }, 'Industry template not found');
        throw new Error('Industry template not found');
    }
    const isCustom = template.is_custom;
    let soulContent = '';
    let productsContent = '';
    let processesContent = '';
    if (isCustom && customData) {
        // Generate dynamic content for "Other" industry
        const role = customData.role || 'مساعد ذكي';
        const specialty = customData.specialty || 'خدمات عامة';
        const tone = customData.tone || 'ودود ومهني';
        const description = customData.businessDescription || 'نقدم خدمات عالية الجودة';
        soulContent = `# شخصية الوكيل المخصص
أنت **مساعد ذكي** في شركة خاصة.
## دورك
${role}
## تخصصك
${specialty}
## أسلوبك
- ${tone}
- يتحدث بالعربية والإنجليزية حسب لغة العميل
- ردود مختصرة ومفيدة
- يحترم وقت العميل
## معلومات العمل
${description}
## تعليمات إضافية
- لا تخترع معلومات
- حول للفريق البشري عند الحاجة
- لا تشارك معلومات سرية
${customData.products ? `\n## منتجاتنا\n${customData.products}` : ''}
${customData.processes ? `\n## إجراءاتنا\n${customData.processes}` : ''}`;
        productsContent = customData.products || `# منتجات وخدمات\n<!-- أضف منتجاتك هنا -->`;
        processesContent = customData.processes || `# إجراءات العمل\n<!-- أضف إجراءاتك هنا -->`;
    }
    else {
        // Standard template
        soulContent = `# شخصية الوكيل\n${template.soul_additions}`;
        productsContent = template.products_template;
        processesContent = template.processes_template;
    }
    // Write files
    await writeWorkspaceFile(tenantId, 'SOUL.md', soulContent);
    await writeWorkspaceFile(tenantId, 'PRODUCTS.md', productsContent);
    await writeWorkspaceFile(tenantId, 'PROCESSES.md', processesContent);
    // For 'other' (custom) sectors, generate sector-specific starter skills
    // via NIM. Universal skills (greeting/complaint/etc.) come for free from
    // workspace-template/SKILLS/. These are the EXTRAS unique to this business.
    if (isCustom && customData?.businessDescription) {
        try {
            const { generateAndPersistCustomSkills } = await import('./custom-skills.js');
            const skills = await generateAndPersistCustomSkills({
                tenantId,
                businessDescription: customData.businessDescription,
                agentRole: customData.role,
                agentTone: customData.tone,
            });
            log.info({ tenantId, count: skills.length }, 'Custom starter skills generated');
        }
        catch (err) {
            // Don't fail onboarding if skill generation flakes — universal skills
            // still load and the tenant can re-trigger generation later.
            log.warn({ tenantId, error: err instanceof Error ? err.message : String(err) }, 'Custom skill generation failed — onboarding continues with universal skills only');
        }
    }
    log.info({ tenantId, industryId, isCustom }, 'Industry template applied');
}
/**
 * Initialize Graphiti Knowledge Graph for the tenant
 * This ensures ALL channels (Web, WhatsApp, etc.) share the same memory
 */
export async function initializeKnowledgeGraph(tenantId) {
    // TODO: Implement Graphiti/Graphify integration
    // This will:
    // 1. Create a graph node for the tenant
    // 2. Index initial documents (SOUL, PRODUCTS, PROCESSES)
    // 3. Set up real-time sync for new messages
    // 4. Enable cross-channel retrieval
    log.info({ tenantId }, 'Knowledge graph initialization scheduled');
    // Placeholder for actual Graphiti SDK call
    // await graphitiClient.createGraph(tenantId, {
    //   name: `tenant-${tenantId}-graph`,
    //   schema: 'business-knowledge',
    //   syncChannels: ['whatsapp', 'web', 'telegram'],
    // });
}
//# sourceMappingURL=industries.js.map