<?php

namespace Database\Seeders;

use App\Models\AutomationRule;
use App\Models\CrmSetting;
use App\Models\MessageTemplate;
use Illuminate\Database\Seeder;

/**
 * Default WhatsApp templates (EN/FA/PS) + automation rules.
 * Covers the full parent-communication lifecycle of a school.
 */
class CrmSeeder extends Seeder
{
    public function run(): void
    {
        $templates = [
            // ── Fees ────────────────────────────────────────────────────
            ['key' => 'fee_before_due', 'name' => 'Fee reminder — before due date', 'category' => 'fee',
                'body_en' => "Dear {{parent_name}}, this is a friendly reminder from {{school}}: the {{fee_title}} of {{student_name}} ({{class}}) — amount {{balance}} AFN — is due on {{due_date}}. Please pay before the due date. Thank you.",
                'body_fa' => "والدین محترم {{parent_name}}، یادآوری دوستانه از {{school}}: فیس {{fee_title}} شاگرد {{student_name}} (صنف {{class}}) به مبلغ {{balance}} افغانی تا تاریخ {{due_date}} قابل پرداخت است. لطفاً قبل از ختم میعاد پرداخت نمایید. تشکر.",
                'body_ps' => "درنه {{parent_name}}، د {{school}} لخوا دوستانه یادونه: د {{student_name}} ({{class}} ټولګي) د {{fee_title}} فیس {{balance}} افغانۍ د {{due_date}} پورې د تادیې وړ دی. مهرباني وکړئ مخکې له نېټې تادیه کړئ. مننه."],
            ['key' => 'fee_on_due', 'name' => 'Fee reminder — on due date', 'category' => 'fee',
                'body_en' => "Dear {{parent_name}}, today {{due_date}} is the last day to pay the {{fee_title}} of {{student_name}} ({{class}}). Outstanding amount: {{balance}} AFN. {{school}}",
                'body_fa' => "والدین محترم {{parent_name}}، امروز {{due_date}} آخرین روز پرداخت فیس {{fee_title}} شاگرد {{student_name}} (صنف {{class}}) می‌باشد. مبلغ باقی‌مانده: {{balance}} افغانی. {{school}}",
                'body_ps' => "درنه {{parent_name}}، نن {{due_date}} د {{student_name}} ({{class}}) د {{fee_title}} فیس د تادیې وروستۍ ورځ ده. پاتې مبلغ: {{balance}} افغانۍ. {{school}}"],
            ['key' => 'fee_overdue', 'name' => 'Fee reminder — overdue (due fee)', 'category' => 'fee',
                'body_en' => "Dear {{parent_name}}, the {{fee_title}} of {{student_name}} ({{class}}) was due on {{due_date}} and is still unpaid. Outstanding: {{balance}} AFN. Please settle it as soon as possible to avoid interruption. {{school}}",
                'body_fa' => "والدین محترم {{parent_name}}، فیس {{fee_title}} شاگرد {{student_name}} (صنف {{class}}) که میعاد آن {{due_date}} بود تا هنوز پرداخت نشده است. مبلغ باقی‌مانده: {{balance}} افغانی. لطفاً هرچه زودتر تصفیه نمایید. {{school}}",
                'body_ps' => "درنه {{parent_name}}، د {{student_name}} ({{class}}) د {{fee_title}} فیس چې نېټه یې {{due_date}} وه لا تر اوسه نه دی تادیه شوی. پاتې: {{balance}} افغانۍ. مهرباني وکړئ ژر تر ژره یې تصفیه کړئ. {{school}}"],
            ['key' => 'payment_receipt', 'name' => 'Payment received — receipt', 'category' => 'fee',
                'body_en' => "Dear {{parent_name}}, we confirm receiving {{amount}} AFN for {{fee_title}} of {{student_name}} ({{class}}) on {{date}}. Receipt no: {{receipt_no}}. Thank you! {{school}}",
                'body_fa' => "والدین محترم {{parent_name}}، دریافت مبلغ {{amount}} افغانی بابت {{fee_title}} شاگرد {{student_name}} (صنف {{class}}) به تاریخ {{date}} تأیید می‌گردد. نمبر رسید: {{receipt_no}}. تشکر! {{school}}",
                'body_ps' => "درنه {{parent_name}}، د {{student_name}} ({{class}}) د {{fee_title}} لپاره د {{amount}} افغانیو ترلاسه کول په {{date}} تایید شو. د رسید شمېره: {{receipt_no}}. مننه! {{school}}"],

            // ── Attendance ─────────────────────────────────────────────
            ['key' => 'absence_alert', 'name' => 'Absence alert — same day', 'category' => 'attendance',
                'body_en' => "Dear {{parent_name}}, {{student_name}} ({{class}}) was marked ABSENT today {{date}}. If this is unexpected please contact the school. {{school}}",
                'body_fa' => "والدین محترم {{parent_name}}، شاگرد {{student_name}} (صنف {{class}}) امروز {{date}} غیرحاضر بود. در صورت بی‌خبری لطفاً با مکتب تماس بگیرید. {{school}}",
                'body_ps' => "درنه {{parent_name}}، زده‌کوونکی {{student_name}} ({{class}}) نن {{date}} غیرحاضر و. که خبر نه یاست مهرباني وکړئ له ښوونځي سره اړیکه ونیسئ. {{school}}"],

            // ── Monthly report ─────────────────────────────────────────
            ['key' => 'monthly_report', 'name' => 'Monthly report to parents', 'category' => 'general',
                'body_en' => "Monthly report — {{month}}\nStudent: {{student_name}} ({{class}})\nAttendance: {{attendance_pct}}% ({{days_present}}/{{days_total}} days)\nOutstanding fees: {{balance}} AFN\nThank you for your continued support. {{school}}",
                'body_fa' => "گزارش ماهوار — {{month}}\nشاگرد: {{student_name}} (صنف {{class}})\nحاضری: {{attendance_pct}}٪ ({{days_present}}/{{days_total}} روز)\nفیس باقی‌مانده: {{balance}} افغانی\nاز همکاری شما سپاسگزاریم. {{school}}",
                'body_ps' => "میاشتنی راپور — {{month}}\nزده‌کوونکی: {{student_name}} ({{class}})\nحاضري: {{attendance_pct}}٪ ({{days_present}}/{{days_total}} ورځې)\nپاتې فیس: {{balance}} افغانۍ\nستاسو د همکارۍ مننه. {{school}}"],

            // ── Exams / evaluation ─────────────────────────────────────
            ['key' => 'exam_results', 'name' => 'Examination result', 'category' => 'exam',
                'body_en' => "Dear {{parent_name}}, result of {{exam_name}} for {{student_name}} ({{class}}): {{obtained}}/{{total}} ({{percentage}}%). {{school}}",
                'body_fa' => "والدین محترم {{parent_name}}، نتیجه {{exam_name}} شاگرد {{student_name}} (صنف {{class}}): {{obtained}}/{{total}} ({{percentage}}٪). {{school}}",
                'body_ps' => "درنه {{parent_name}}، د {{student_name}} ({{class}}) د {{exam_name}} پایله: {{obtained}}/{{total}} ({{percentage}}٪). {{school}}"],
            ['key' => 'exam_schedule', 'name' => 'Exam schedule announcement', 'category' => 'exam',
                'body_en' => "Dear {{parent_name}}, the {{exam_name}} for class {{class}} starts on {{date}}. Please make sure {{student_name}} is prepared and present. {{school}}",
                'body_fa' => "والدین محترم {{parent_name}}، امتحان {{exam_name}} صنف {{class}} از تاریخ {{date}} آغاز می‌شود. لطفاً از آمادگی و حضور {{student_name}} اطمینان حاصل کنید. {{school}}",
                'body_ps' => "درنه {{parent_name}}، د {{class}} ټولګي {{exam_name}} له {{date}} پیلیږي. مهرباني وکړئ د {{student_name}} چمتووالی او حاضري ډاډمنه کړئ. {{school}}"],
            ['key' => 'evaluation_summary', 'name' => 'Evaluation summary', 'category' => 'evaluation',
                'body_en' => "Dear {{parent_name}}, the monthly evaluation of {{student_name}} ({{class}}) is complete. Please visit the school or contact the class teacher for details. {{school}}",
                'body_fa' => "والدین محترم {{parent_name}}، ارزیابی ماهوار شاگرد {{student_name}} (صنف {{class}}) تکمیل شد. برای جزئیات لطفاً به مکتب مراجعه یا با معلم صنف تماس بگیرید. {{school}}",
                'body_ps' => "درنه {{parent_name}}، د {{student_name}} ({{class}}) میاشتنۍ ارزونه بشپړه شوه. د جزئیاتو لپاره ښوونځي ته مراجعه وکړئ یا د ټولګي له ښوونکي سره اړیکه ونیسئ. {{school}}"],

            // ── Events / announcements ─────────────────────────────────
            ['key' => 'event_reminder', 'name' => 'Event invitation / reminder', 'category' => 'event',
                'body_en' => "Dear {{parent_name}}, you are invited to {{event_title}} on {{event_date}} at {{school}}. We look forward to seeing you!",
                'body_fa' => "والدین محترم {{parent_name}}، شما به {{event_title}} به تاریخ {{event_date}} در {{school}} دعوت هستید. منتظر دیدار شما هستیم!",
                'body_ps' => "درنه {{parent_name}}، تاسو د {{event_date}} په نېټه په {{school}} کې {{event_title}} ته بلل شوي یاست. ستاسو لیدو ته سترګې په لار یو!"],
            ['key' => 'holiday_announcement', 'name' => 'Holiday announcement', 'category' => 'event',
                'body_en' => "Dear parents, {{school}} will be closed from {{date_from}} to {{date_to}} ({{reason}}). Classes resume on {{resume_date}}. Happy holidays!",
                'body_fa' => "والدین محترم، {{school}} از {{date_from}} تا {{date_to}} ({{reason}}) رخصت می‌باشد. دروس به تاریخ {{resume_date}} دوباره آغاز می‌شود. رخصتی خوش!",
                'body_ps' => "درنو والدینو، {{school}} له {{date_from}} څخه تر {{date_to}} پورې ({{reason}}) رخصت دی. درسونه به په {{resume_date}} بیا پیل شي. ښې رخصتۍ!"],
            ['key' => 'ptm_invitation', 'name' => 'Parent–teacher meeting invitation', 'category' => 'event',
                'body_en' => "Dear {{parent_name}}, a parent–teacher meeting for class {{class}} is scheduled on {{date}}. Your presence matters for {{student_name}}'s progress. {{school}}",
                'body_fa' => "والدین محترم {{parent_name}}، جلسه والدین و معلمان صنف {{class}} به تاریخ {{date}} برگزار می‌شود. حضور شما برای پیشرفت {{student_name}} مهم است. {{school}}",
                'body_ps' => "درنه {{parent_name}}، د {{class}} ټولګي د والدینو او ښوونکو غونډه د {{date}} لپاره ټاکل شوې. ستاسو حضور د {{student_name}} د پرمختګ لپاره مهم دی. {{school}}"],

            // ── Admissions / misc ──────────────────────────────────────
            ['key' => 'welcome_admission', 'name' => 'Admission welcome', 'category' => 'general',
                'body_en' => "Dear {{parent_name}}, welcome to the {{school}} family! {{student_name}} has been admitted to class {{class}} (admission no {{admission_number}}). We are honoured by your trust.",
                'body_fa' => "والدین محترم {{parent_name}}، به خانواده {{school}} خوش آمدید! {{student_name}} در صنف {{class}} (نمبر شمولیت {{admission_number}}) شامل گردید. از اعتماد شما سپاسگزاریم.",
                'body_ps' => "درنه {{parent_name}}، د {{school}} کورنۍ ته ښه راغلاست! {{student_name}} په {{class}} ټولګي کې (د شمولیت شمېره {{admission_number}}) شامل شو. ستاسو پر باور ویاړو."],
            ['key' => 'birthday_wish', 'name' => 'Student birthday wish', 'category' => 'general',
                'body_en' => "Happy birthday {{student_name}}! 🎂 The whole {{school}} family wishes you a wonderful year of learning and joy.",
                'body_fa' => "تولدت مبارک {{student_name}}! 🎂 تمام خانواده {{school}} برایت سالی پر از آموختن و شادی آرزو می‌کند.",
                'body_ps' => "کلیزه دې مبارکه {{student_name}}! 🎂 د {{school}} ټوله کورنۍ تاته د زده‌کړې او خوښۍ ډک کال غواړي."],
            ['key' => 'general_notice', 'name' => 'General notice', 'category' => 'general',
                'body_en' => "Dear {{parent_name}}, an announcement from {{school}}: {{notice}}",
                'body_fa' => "والدین محترم {{parent_name}}، اطلاعیه از طرف {{school}}: {{notice}}",
                'body_ps' => "درنه {{parent_name}}، د {{school}} لخوا خبرتیا: {{notice}}"],
            ['key' => 'staff_announcement', 'name' => 'Staff announcement', 'category' => 'general',
                'body_en' => "Dear {{staff_name}}, an internal announcement from {{school}}: {{notice}}",
                'body_fa' => "همکار محترم {{staff_name}}، اطلاعیه داخلی {{school}}: {{notice}}",
                'body_ps' => "درنه {{staff_name}}، د {{school}} داخلي خبرتیا: {{notice}}"],
        ];

        foreach ($templates as $t) {
            MessageTemplate::updateOrCreate(['key' => $t['key']], $t);
        }

        $rules = [
            ['key' => 'fee_before_due', 'name' => 'Fee reminder before due date', 'template' => 'fee_before_due', 'params' => ['days_before' => 3]],
            ['key' => 'fee_on_due', 'name' => 'Fee reminder on the due date', 'template' => 'fee_on_due', 'params' => []],
            ['key' => 'fee_overdue', 'name' => 'Overdue fee chaser (repeats)', 'template' => 'fee_overdue', 'params' => ['repeat_every' => 7]],
            ['key' => 'absence_alert', 'name' => 'Same-day absence alert', 'template' => 'absence_alert', 'params' => []],
            ['key' => 'monthly_report', 'name' => 'Monthly report to parents', 'template' => 'monthly_report', 'params' => ['day_of_month' => 1]],
            ['key' => 'payment_receipt', 'name' => 'Receipt after each payment', 'template' => 'payment_receipt', 'params' => []],
        ];
        foreach ($rules as $r) {
            AutomationRule::updateOrCreate(
                ['key' => $r['key']],
                ['name' => $r['name'], 'params' => $r['params'],
                    'template_id' => MessageTemplate::where('key', $r['template'])->value('id')],
            );
        }

        // Default gateway settings (manual mode until API credentials exist).
        if (!CrmSetting::first()) {
            CrmSetting::create(['mode' => 'manual', 'country_code' => '93', 'sender_name' => 'Shams Tabriz High School', 'default_language' => 'fa']);
        }
    }
}
