<?php
/**
 * Seed کامل دمو HVAC — ۷ سناریوی مشخص + دستیار
 * Idempotent: ردیف‌های قبلی با پرچم hvac_demo پاک و بازسازی می‌شوند.
 *
 * C:\xampp\php\php.exe C:\xampp\htdocs\acc-engine\run-service-hvac-demo-seed.php
 * http://localhost/acc-engine/run-service-hvac-demo-seed.php
 */
declare(strict_types=1);

define( 'ACC_BASE_PATH', __DIR__ );
define( 'ACC_PATH', __DIR__ . '/' );
define( 'ABSPATH', __DIR__ . '/' );
define( 'ACC_URL', '/acc-engine/' );

require_once __DIR__ . '/standalone/bootstrap.php';
require_once ACC_PATH . 'includes/helpers/svc-teams.php';
require_once ACC_PATH . 'includes/helpers/svc-algorithm.php';
require_once ACC_PATH . 'includes/helpers/svc-supplier.php';
require_once ACC_PATH . 'includes/controllers/SR_Controller.php';
require_once ACC_PATH . 'includes/helpers/service-report-render.php';

/** @var wpdb $wpdb */
global $wpdb;

const DEMO_PASS     = 'Demo@2026';
const DEMO_PHONE    = '09123001000';
const DEMO_MARKER   = 'hvac_demo';
const DEMO_BATCH    = 'hvac_demo_v1';

function hvac_req( string $method, array $json = [], array $url = [] ): WP_REST_Request {
    $req = new WP_REST_Request( $method );
    $req->set_json_params( $json );
    $req->set_url_params( $url );
    return $req;
}

function hvac_data( WP_REST_Response $res ): array {
    $d = $res->get_data();
    return is_array( $d ) ? $d : [ 'raw' => $d ];
}

function hvac_act_as( int $uid ): void {
    global $wpdb;
    $row = $wpdb->get_row( $wpdb->prepare(
        "SELECT ID, user_login, display_name FROM {$wpdb->users} WHERE ID = %d", $uid
    ), ARRAY_A );
    $GLOBALS['acc_current_user'] = [
        'id'           => $uid,
        'username'     => $row['user_login'] ?? ( 'user_' . $uid ),
        'display_name' => $row['display_name'] ?? '',
        'roles'        => [ 'authenticated' ],
        'permissions'  => [ '*' ],
    ];
    $GLOBALS['acc_jwt_user_id'] = $uid;
}

function hvac_reset(): void {
    $GLOBALS['acc_current_user'] = null;
    unset( $GLOBALS['acc_jwt_user_id'] );
}

function hvac_ensure_user( string $login, string $display, string $email, string $role ): int {
    global $wpdb;
    $wpdb->query( $wpdb->prepare(
        "DELETE FROM {$wpdb->users} WHERE user_login = %s AND ID = 0", $login
    ) );
    $id = (int) $wpdb->get_var( $wpdb->prepare(
        "SELECT ID FROM {$wpdb->users} WHERE user_login = %s AND ID > 0", $login
    ) );
    if ( ! $id ) {
        $new_id = (int) $wpdb->get_var( "SELECT COALESCE( MAX( ID ), 0 ) + 1 FROM {$wpdb->users}" );
        $wpdb->insert( $wpdb->users, [
            'ID'              => $new_id,
            'user_login'      => $login,
            'user_pass'       => password_hash( DEMO_PASS, PASSWORD_BCRYPT ),
            'user_nicename'   => $login,
            'user_email'      => $email,
            'user_registered' => current_time( 'mysql' ),
            'display_name'    => $display,
            'user_status'     => 0,
        ] );
        $id = $new_id;
    } else {
        $wpdb->update( $wpdb->users, [
            'display_name' => $display,
            'user_email'   => $email,
            'user_pass'    => password_hash( DEMO_PASS, PASSWORD_BCRYPT ),
        ], [ 'ID' => $id ] );
    }
    $role_id = (int) $wpdb->get_var( $wpdb->prepare(
        "SELECT id FROM {$wpdb->prefix}acl_roles WHERE slug = %s", $role
    ) );
    if ( $role_id && ! $wpdb->get_var( $wpdb->prepare(
        "SELECT id FROM {$wpdb->prefix}acl_user_roles WHERE user_id=%d AND role_id=%d AND scope_type='global'",
        $id, $role_id
    ) ) ) {
        $wpdb->insert( "{$wpdb->prefix}acl_user_roles", [
            'user_id' => $id, 'role_id' => $role_id, 'scope_type' => 'global', 'scope_id' => null,
        ] );
    }
    return $id;
}

function hvac_wipe_previous(): array {
    global $wpdb;
    $pre = $wpdb->prefix;
    $deleted = [ 'requests' => 0, 'pm' => 0, 'parts' => 0, 'equip' => 0, 'catalog' => 0 ];

    $req_ids = $wpdb->get_col( $wpdb->prepare(
        "SELECT id FROM {$pre}svc_requests
         WHERE phone = %s AND (session_key LIKE %s OR extra_data LIKE %s OR complaint_text LIKE %s)",
        DEMO_PHONE,
        DEMO_MARKER . '%',
        '%' . DEMO_MARKER . '%',
        '%[دمو HVAC]%'
    ) ) ?: [];

    if ( $req_ids ) {
        $ph = implode( ',', array_map( 'intval', $req_ids ) );
        $report_ids = $wpdb->get_col( "SELECT id FROM {$pre}svc_reports WHERE request_id IN ({$ph})" ) ?: [];
        if ( $report_ids ) {
            $rph = implode( ',', array_map( 'intval', $report_ids ) );
            $wpdb->query( "DELETE FROM {$pre}svc_payments WHERE report_id IN ({$rph})" );
            $wpdb->query( "DELETE FROM {$pre}svc_reports WHERE id IN ({$rph})" );
        }
        $wpdb->query( "DELETE FROM {$pre}svc_parts_orders WHERE request_id IN ({$ph})" );
        $wpdb->query( "DELETE FROM {$pre}svc_equipment_inquiries WHERE request_id IN ({$ph})" );
        $wpdb->query( "DELETE FROM {$pre}svc_requests WHERE id IN ({$ph})" );
        $deleted['requests'] = count( $req_ids );
    }

    $deleted['pm'] = (int) $wpdb->query( $wpdb->prepare(
        "DELETE FROM {$pre}svc_pm_contracts WHERE phone = %s AND site_label LIKE %s",
        DEMO_PHONE, '%[دمو HVAC]%'
    ) );
    $deleted['parts'] += (int) $wpdb->query( $wpdb->prepare(
        "DELETE FROM {$pre}svc_parts_orders WHERE phone = %s AND notes LIKE %s",
        DEMO_PHONE, '%' . DEMO_MARKER . '%'
    ) );
    $deleted['equip'] += (int) $wpdb->query( $wpdb->prepare(
        "DELETE FROM {$pre}svc_equipment_inquiries WHERE phone = %s AND notes LIKE %s",
        DEMO_PHONE, '%' . DEMO_MARKER . '%'
    ) );

    // کاتالوگ ZR190 دمو (SKU ثابت)
    $ct = Svc_Supplier::catalog_table();
    if ( $wpdb->get_var( $wpdb->prepare( 'SHOW TABLES LIKE %s', $ct ) ) === $ct ) {
        $deleted['catalog'] = (int) $wpdb->query(
            "DELETE FROM {$ct} WHERE sku IN ('ZR190KCE','ZR190KCE-OEM') OR name LIKE '%ZR190KCE%دمو%'"
        );
    }

    return $deleted;
}

function hvac_srd_payload( string $service_type, array $customer, string $complaint, array $lines ): array {
    $svc_total   = array_sum( array_column( $lines['service_lines'] ?? [], 'total' ) );
    $part_total  = array_sum( array_column( $lines['part_lines'] ?? [], 'total' ) );
    $mat_total   = array_sum( array_column( $lines['material_lines'] ?? [], 'total' ) );
    $extra_total = array_sum( array_column( $lines['extra_costs'] ?? [], 'amount' ) );
    $subtotal    = $svc_total + $part_total + $mat_total + $extra_total;
    $discount    = (int) ( $lines['discount'] ?? 0 );
    $tax         = (int) round( ( $subtotal - $discount ) * 0.09 );
    $total       = $subtotal - $discount + $tax;
    $paid        = (int) ( $lines['paid'] ?? 0 );
    return array_merge( [
        'service_type'       => $service_type,
        'customer_name'      => $customer['name'],
        'company'            => $customer['company'],
        'phone'              => $customer['phone'],
        'email'              => $customer['email'],
        'address'            => $customer['address'],
        'site_label'         => $customer['site'],
        'complaint_text'     => $complaint,
        'diagnosis_result'   => $lines['diagnosis'] ?? 'بررسی و اقدام انجام شد.',
        'service_lines'      => $lines['service_lines'] ?? [],
        'part_lines'         => $lines['part_lines'] ?? [],
        'material_lines'     => $lines['material_lines'] ?? [],
        'extra_costs'        => $lines['extra_costs'] ?? [],
        'recommendations'    => $lines['recommendations'] ?? [ 'سرویس دوره‌ای پیشنهاد می‌شود.' ],
        'pm_offer'           => $lines['pm_offer'] ?? [ 'plan' => 'quarterly', 'selected' => false ],
        'subtotal_services'  => $svc_total,
        'subtotal_parts'     => $part_total,
        'subtotal_materials' => $mat_total,
        'subtotal_extra'     => $extra_total,
        'discount'           => $discount,
        'tax'                => $tax,
        'total'              => $total,
        'paid'               => $paid,
        'balance'            => max( 0, $total - $paid ),
        'tech_signature'     => $lines['tech_signature'] ?? 'رضا موسوی',
        'customer_signature' => 'امضای مشتری',
        'report_date'        => current_time( 'Y-m-d' ),
        'warehouse_id'       => 0,
    ], $lines['extra_fields'] ?? [] );
}

function hvac_run_case(
    string $key,
    string $type,
    string $title,
    array $visitor_payload,
    array $srd_lines,
    int $senior_id,
    int $tech_id,
    ?callable $after = null
): array {
    global $wpdb;
    $steps = [];
    $scheduled = date( 'Y-m-d H:i:s', strtotime( '+1 day 10:00' ) );

    hvac_reset();
    $create = hvac_data( SR_Controller::visitor_create_request( hvac_req( 'POST', $visitor_payload ) ) );
    if ( empty( $create['success'] ) ) {
        throw new RuntimeException( $create['message'] ?? 'ثبت درخواست ناموفق' );
    }
    $d = $create['data'];
    $request_id = (int) $d['id'];

    // پرچم دمو در extra_data
    $extra = json_decode(
        (string) $wpdb->get_var( $wpdb->prepare(
            "SELECT extra_data FROM {$wpdb->prefix}svc_requests WHERE id=%d", $request_id
        ) ),
        true
    ) ?: [];
    $extra['demo_key']   = DEMO_MARKER;
    $extra['demo_batch'] = DEMO_BATCH;
    $extra['demo_scenario'] = $key;
    if ( ! empty( $visitor_payload['_demo_extra'] ) && is_array( $visitor_payload['_demo_extra'] ) ) {
        $extra = array_merge( $extra, $visitor_payload['_demo_extra'] );
    }
    $wpdb->update( "{$wpdb->prefix}svc_requests", [
        'extra_data' => wp_json_encode( $extra, JSON_UNESCAPED_UNICODE ),
    ], [ 'id' => $request_id ] );

    $steps[] = [ 'step' => 'ثبت درخواست', 'tracking_code' => $d['tracking_code'] ];

    hvac_act_as( $senior_id );
    hvac_data( SR_Controller::assign_request( hvac_req( 'POST', [
        'technician_id'  => $tech_id,
        'status'         => 'assigned',
        'scheduled_at'   => $scheduled,
        'dispatch_notes' => "دمو HVAC — {$title}",
    ], [ 'id' => $request_id ] ) ) );
    $steps[] = [ 'step' => 'Dispatch', 'technician_id' => $tech_id ];

    hvac_act_as( $tech_id );
    hvac_data( SR_Controller::update_request( hvac_req( 'PUT', [ 'status' => 'in_progress' ], [ 'id' => $request_id ] ) ) );

    $create_rpt = hvac_data( SR_Controller::create_report( hvac_req( 'POST', [ 'request_id' => $request_id ] ) ) );
    if ( empty( $create_rpt['success'] ) ) {
        throw new RuntimeException( 'ایجاد SRD ناموفق' );
    }
    $report_id = (int) $create_rpt['data']['id'];
    $payload = hvac_srd_payload( $type, [
        'name'    => $visitor_payload['name'],
        'company' => $visitor_payload['company'] ?? '',
        'phone'   => $visitor_payload['phone'],
        'email'   => $visitor_payload['email'] ?? '',
        'address' => $visitor_payload['address'] ?? '',
        'site'    => $visitor_payload['site_label'],
    ], $visitor_payload['complaint_text'] ?? '', $srd_lines );

    hvac_data( SR_Controller::save_report( hvac_req( 'PUT', $payload, [ 'id' => $report_id ] ) ) );
    $fin = hvac_data( SR_Controller::finalize_report( hvac_req( 'POST', $payload, [ 'id' => $report_id ] ) ) );
    if ( empty( $fin['success'] ) ) {
        throw new RuntimeException( $fin['message'] ?? 'Finalize ناموفق' );
    }
    $rpt = $fin['data'] ?? [];
    $steps[] = [
        'step'      => 'گزارش / فاکتور',
        'report_no' => $rpt['report_no'] ?? '',
        'total'     => $rpt['total'] ?? $payload['total'],
        'public_url'=> Service_Report_Render::public_url( $rpt['public_token'] ?? '' ),
    ];

    hvac_act_as( $senior_id );
    hvac_data( SR_Controller::senior_review_report( hvac_req( 'POST', [
        'status' => 'approved',
        'note'   => "تأیید دمو — {$title}",
    ], [ 'id' => $report_id ] ) ) );

    if ( $after ) {
        $extra_step = $after( $request_id, $report_id, $d, $rpt );
        if ( $extra_step ) $steps[] = $extra_step;
    }

    hvac_reset();
    $track = hvac_data( SR_Controller::visitor_track( hvac_req( 'GET', [], [ 'code' => $d['tracking_code'] ] ) ) );

    return [
        'key'            => $key,
        'service_type'   => $type,
        'title'          => $title,
        'tracking_code'  => $d['tracking_code'],
        'request_no'     => $d['request_no'] ?? '',
        'request_id'     => $request_id,
        'report_id'      => $report_id,
        'report_no'      => $rpt['report_no'] ?? '',
        'public_token'   => $rpt['public_token'] ?? '',
        'public_url'     => Service_Report_Render::public_url( $rpt['public_token'] ?? '' ),
        'pay_url'        => rtrim( ACC_URL, '/' ) . '/service-pay.php?token=' . ( $rpt['public_token'] ?? '' ),
        'total'          => $rpt['total'] ?? 0,
        'balance'        => $rpt['balance'] ?? 0,
        'timeline_count' => count( $track['data']['timeline'] ?? [] ),
        'consult_result' => $d['consult_result'] ?? null,
        'steps'          => $steps,
        'ui_hint'        => '',
    ];
}

$base  = rtrim( ACC_URL, '/' );
$log   = [];
$cases = [];
$wipe  = [];

$customer_common = [
    'phone' => DEMO_PHONE,
    'email' => 'hvac-demo@applied.test',
];

try {
    $wipe = hvac_wipe_previous();
    $log[] = [ 'ok' => true, 'title' => 'پاک‌سازی دمو قبلی', 'data' => $wipe ];

    $senior_id = hvac_ensure_user( 'svc_senior_demo', 'علی رضایی — ارشد', 'senior@test.local', 'service_senior' );
    $tech_id   = hvac_ensure_user( 'svc_tech1_demo', 'رضا موسوی — میدانی', 'tech1@test.local', 'service_technician' );
    $tech_screw = hvac_ensure_user(
        'svc_tech_screw',
        'مهندس سعید نوری — متخصص چیلر اسکرو',
        'screw@test.local',
        'service_technician'
    );
    if ( Svc_Teams::table_exists() ) {
        Svc_Teams::add_team_member( $senior_id, $tech_id );
        Svc_Teams::add_team_member( $senior_id, $tech_screw );
    }

    // ۵ تأمین‌کننده ZR190
    $suppliers_meta = [
        [ 'svc_sup_zr1', 'شرکت سرمایش پارس', 'تهران', 18500000, 3, 12, 5, 4.8 ],
        [ 'svc_sup_zr2', 'قطعات اوریجینال کاسپین', 'کرج', 17200000, 7, 6, 4, 4.5 ],
        [ 'svc_sup_zr3', 'بازرگانی مبرد آسیا', 'اصفهان', 16800000, 10, 3, 8, 4.1 ],
        [ 'svc_sup_zr4', 'تأمین تجهیزات تهویه البرز', 'تبریز', 19100000, 2, 18, 3, 4.9 ],
        [ 'svc_sup_zr5', 'فروشگاه صنعتی دلتا کول', 'شیراز', 15900000, 14, 3, 12, 3.9 ],
    ];
    $supplier_ids = [];
    foreach ( $suppliers_meta as $i => [ $login, $company, $city, $price, $stock, $warranty, $lead, $rating ] ) {
        $uid = hvac_ensure_user( $login, $company, "{$login}@test.local", 'service_supplier' );
        Svc_Supplier::ensure_profile( $uid );
        $wpdb->update( Svc_Supplier::profile_table(), [
            'company_name' => $company,
            'contact_name' => 'مسئول فروش',
            'phone'        => '02188' . str_pad( (string) ( 10000 + $i ), 5, '0', STR_PAD_LEFT ),
            'city'         => $city,
            'description'  => 'تأمین Copeland ZR190 — ' . DEMO_MARKER,
            'is_active'    => 1,
        ], [ 'user_id' => $uid ] );
        $wpdb->insert( Svc_Supplier::catalog_table(), [
            'supplier_user_id' => $uid,
            'item_type'        => 'part',
            'name'             => 'کمپرسور Copeland ZR190KCE [دمو]',
            'sku'              => 'ZR190KCE',
            'brand'            => 'Copeland',
            'model'            => 'ZR190KCE',
            'price'            => $price,
            'stock_qty'        => $stock,
            'in_stock'         => $stock > 0 ? 1 : 0,
            'lead_days'        => $lead,
            'is_active'        => 1,
        ] );
        // ذخیره warranty در notes جدول اگر ستون جدا نیست — در rating الگوریتم از lead استفاده می‌شود
        $cat_id = (int) $wpdb->insert_id;
        if ( $cat_id ) {
            $wpdb->query( $wpdb->prepare(
                "UPDATE " . Svc_Supplier::catalog_table() . " SET model = %s WHERE id = %d",
                "ZR190KCE|W{$warranty}|R{$rating}",
                $cat_id
            ) );
        }
        $supplier_ids[] = [
            'user_id' => $uid, 'login' => $login, 'company' => $company,
            'price' => $price, 'warranty_months' => $warranty, 'lead_days' => $lead, 'rating' => $rating,
        ];
    }
    $log[] = [ 'ok' => true, 'title' => 'تأمین‌کنندگان ZR190', 'data' => [ 'count' => count( $supplier_ids ) ] ];
} catch ( Throwable $e ) {
    $log[] = [ 'ok' => false, 'title' => 'راه‌اندازی کاربران', 'error' => $e->getMessage() ];
    goto render;
}

$session_base = DEMO_MARKER . '_' . date( 'Ymd' );

$definitions = [
    'consult' => [
        'title' => 'مشاوره فنی — چیلر اسکرو Carrier',
        'icon'  => '📞',
        'ui'    => 'مشتری → پرونده من → این کد · یا ویجت → مشاوره فنی → تحلیل اولیه',
        'tech'  => $tech_screw,
        'visitor' => [
            'session_key' => $session_base . '_consult',
            'name' => 'مهندس فرهاد اکبری',
            'company' => 'شرکت صنایع غذایی آفتاب',
            'phone' => DEMO_PHONE,
            'email' => $customer_common['email'],
            'address' => 'تهران، شهرک صنعتی عباس‌آباد',
            'site_label' => 'کارخانه مواد غذایی — موتورخانه چیلر',
            'service_type' => 'phone_consult',
            'device_type' => 'چیلر',
            'brand' => 'Carrier',
            'model' => '30GX',
            'capacity' => '350 تن',
            'refrigerant' => 'R134a',
            'serial_no' => 'CR-30GX-DEMO-350',
            'install_location' => 'موتورخانه طبقه همکف',
            'error_code' => 'High Condensing Pressure',
            'ambient_temp' => 38,
            'suction_pressure' => '3.2 bar',
            'discharge_pressure' => '12 bar',
            'complaint_text' => '[دمو HVAC] کمپرسور اسکرو هر ۱۵ دقیقه trip می‌کند. خطا High Condensing Pressure. مبرد R134a، ساکشن ۳.۲ bar، دیسشارژ ۱۲ bar.',
            '_demo_extra' => [
                'probabilities_demo' => true,
                'suction_pressure' => '3.2 bar',
                'discharge_pressure' => '12 bar',
            ],
        ],
        'srd' => [
            'diagnosis' => "تحلیل مشاوره:\n• احتمال ۴۵٪ کثیفی کندانسور\n• احتمال ۳۰٪ خرابی فن کندانسور\n• احتمال ۲۵٪ Overcharge مبرد\nپیشنهاد: شستشوی کندانسور و تست فن قبل از بازدید حضوری.",
            'service_lines' => [ [ 'title' => 'مشاوره فنی تلفنی تخصصی اسکرو', 'qty' => 1, 'unit_price' => 1800000, 'total' => 1800000 ] ],
            'recommendations' => [
                'شستشوی کویل کندانسور',
                'اندازه‌گیری آمپر فن',
                'در صورت ادامه trip، بازدید میدانی ثبت شود',
            ],
            'paid' => 1800000,
            'tech_signature' => 'سعید نوری',
        ],
    ],
    'repair' => [
        'title' => 'تعمیرات — چیلر بیمارستان',
        'icon'  => '🛠',
        'ui'    => 'مشتری → پرونده · ارشد/تکنسین اسکرو: svc_tech_screw',
        'tech'  => $tech_screw,
        'visitor' => [
            'session_key' => $session_base . '_repair',
            'name' => 'مهندس مریم حسینی',
            'company' => 'بیمارستان تخصصی آریا',
            'phone' => DEMO_PHONE,
            'email' => $customer_common['email'],
            'address' => 'تهران، خیابان ولیعصر، نبش مطهری',
            'site_label' => 'بیمارستان آریا — موتورخانه طبقه منفی ۲',
            'service_type' => 'repair',
            'priority' => 'urgent',
            'device_type' => 'چیلر',
            'brand' => 'Trane',
            'model' => 'RTHD Screw',
            'capacity' => '200 تن',
            'refrigerant' => 'R134a',
            'complaint_text' => '[دمو HVAC] چیلر اسکرو روشن نمی‌شود. نزدیک‌ترین متخصص اسکرو اعزام شود.',
        ],
        'srd' => [
            'diagnosis' => 'عیب‌یابی: کنتاکتور اصلی کمپرسور سوخته — تعویض انجام شد. گارانتی تعمیر ۹۰ روز.',
            'service_lines' => [ [ 'title' => 'عیب‌یابی و تعویض کنتاکتور', 'qty' => 1, 'unit_price' => 4500000, 'total' => 4500000 ] ],
            'part_lines' => [ [ 'title' => 'کنتاکتور ۳ فاز ۴۰A', 'qty' => 1, 'unit_price' => 3200000, 'total' => 3200000 ] ],
            'recommendations' => [ 'گارانتی تعمیر: ۹۰ روز از تاریخ گزارش', 'بازرسی اتصالات برق پس از ۷ روز' ],
            'extra_fields' => [ 'warranty_days' => 90 ],
            'paid' => 3000000,
            'discount' => 200000,
            'tech_signature' => 'سعید نوری',
        ],
        'after' => function ( int $req_id, int $report_id ) use ( $wpdb ) {
            $wpdb->update( "{$wpdb->prefix}svc_reports", [
                'recommendations' => wp_json_encode( [
                    'گارانتی تعمیر: ۹۰ روز',
                    'قطعه تعویضی دارای گارانتی ۶ ماهه',
                ], JSON_UNESCAPED_UNICODE ),
            ], [ 'id' => $report_id ] );
            return [ 'step' => 'گارانتی تعمیر ۹۰ روز ثبت شد' ];
        },
    ],
    'pm' => [
        'title' => 'PM — کارخانه سیمان',
        'icon'  => '📅',
        'ui'    => 'عملیات → قراردادهای PM · مشتری امتیاز سرویس را می‌بیند',
        'tech'  => $tech_id,
        'visitor' => [
            'session_key' => $session_base . '_pm',
            'name' => 'مهندس کاظم جلالی',
            'company' => 'کارخانه سیمان البرز',
            'phone' => DEMO_PHONE,
            'email' => $customer_common['email'],
            'address' => 'کرج، جاده قدیم قزوین، کیلومتر ۱۸',
            'site_label' => 'سیمان البرز — سالن هواساز و چیلر [دمو HVAC]',
            'service_type' => 'pm',
            'pm_plan' => 'monthly',
            'operating_hours' => 9800,
            'device_type' => 'هواساز',
            'brand' => 'Carrier',
            'model' => 'AHU-Multi',
            'capacity' => '۱۰ هواساز + ۵ چیلر',
            'complaint_text' => '[دمو HVAC] قرارداد نگهداری سالانه — ۱۰ AHU و ۵ چیلر. برنامه ماهانه/فصلی/نیمه‌سال/سالانه.',
        ],
        'srd' => [
            'diagnosis' => 'بازدید PM ماهانه انجام شد — چک‌لیست هواساز و چیلر تکمیل. امتیاز مشتری: ۴.۷/۵',
            'service_lines' => [ [ 'title' => 'بازدید PM ماهانه (۱۰ AHU + ۵ چیلر)', 'qty' => 1, 'unit_price' => 18500000, 'total' => 18500000 ] ],
            'pm_offer' => [ 'plan' => 'monthly', 'selected' => true ],
            'recommendations' => [ 'یادآوری SMS برای بازدید بعدی ارسال شد (لاگ)', 'امتیاز مشتری از کیفیت سرویس: ۴.۷' ],
            'paid' => 0,
        ],
        'after' => function ( int $req_id, int $report_id, array $d ) use ( $wpdb, $tech_id ) {
            $device_id = (int) $wpdb->get_var( $wpdb->prepare(
                "SELECT device_id FROM {$wpdb->prefix}svc_requests WHERE id=%d", $req_id
            ) );
            $plans = [
                [ 'monthly', '+1 month', 'بازدید ماهانه AHU' ],
                [ 'quarterly', '+3 months', 'سرویس فصلی چیلر' ],
                [ 'semi_annual', '+6 months', 'بازدید شش‌ماهه کامل' ],
                [ 'annual', '+1 year', 'اورهال سالانه' ],
            ];
            $ids = [];
            foreach ( $plans as [ $plan, $offset, $label ] ) {
                $wpdb->insert( "{$wpdb->prefix}svc_pm_contracts", [
                    'report_id'       => $report_id,
                    'device_id'       => $device_id ?: null,
                    'customer_name'   => 'مهندس کاظم جلالی',
                    'phone'           => DEMO_PHONE,
                    'site_label'      => "سیمان البرز — {$label} [دمو HVAC]",
                    'plan'            => $plan,
                    'status'          => 'active',
                    'next_visit_date' => $plan === 'monthly'
                        ? current_time( 'Y-m-d' )
                        : date( 'Y-m-d', strtotime( $offset ) ),
                    'created_at'      => current_time( 'mysql' ),
                ] );
                $ids[] = (int) $wpdb->insert_id;
            }
            // شبیه‌سازی SMS یادآوری
            $sms_dir = ACC_PATH . 'logs';
            if ( ! is_dir( $sms_dir ) ) @mkdir( $sms_dir, 0755, true );
            $sms_line = date( 'c' ) . " | PM reminder | phone=" . DEMO_PHONE
                . " | msg=یادآوری بازدید ماهانه کارخانه سیمان البرز — دمو HVAC\n";
            file_put_contents( $sms_dir . '/svc-sms.log', $sms_line, FILE_APPEND );
            // ثبت امتیاز مشتری در extra
            $wpdb->update( "{$wpdb->prefix}svc_requests", [
                'extra_data' => wp_json_encode( array_merge(
                    json_decode( (string) $wpdb->get_var( $wpdb->prepare(
                        "SELECT extra_data FROM {$wpdb->prefix}svc_requests WHERE id=%d", $req_id
                    ) ), true ) ?: [],
                    [ 'customer_score' => 4.7, 'demo_key' => DEMO_MARKER, 'sms_reminder' => true ]
                ), JSON_UNESCAPED_UNICODE ),
            ], [ 'id' => $req_id ] );
            return [ 'step' => '۴ قرارداد PM + لاگ SMS', 'pm_ids' => $ids ];
        },
    ],
    'parts' => [
        'title' => 'تأمین قطعات — Copeland ZR190KCE',
        'icon'  => '🔩',
        'ui'    => 'ویجت → تأمین قطعات → استعلام · یا پرونده مشتری',
        'tech'  => $tech_id,
        'visitor' => [
            'session_key' => $session_base . '_parts',
            'name' => 'آقای نادر قاسمی',
            'company' => 'شرکت تهویه صنعت سپاهان',
            'phone' => DEMO_PHONE,
            'email' => $customer_common['email'],
            'address' => 'اصفهان، شهرک صنعتی جی',
            'site_label' => 'انبار قطعات — سپاهان',
            'service_type' => 'parts_supply',
            'device_type' => 'چیلر',
            'brand' => 'Copeland',
            'model' => 'ZR190KCE',
            'part_number' => 'ZR190KCE',
            'part_qty' => 1,
            'complaint_text' => '[دمو HVAC] نیاز به کمپرسور Copeland ZR190KCE — مقایسه ۵ تأمین‌کننده.',
        ],
        'srd' => [
            'diagnosis' => 'سفارش از تأمین‌کننده با بهترین ترکیب قیمت/گارانتی/امتیاز صادر و ارسال شد.',
            'service_lines' => [ [ 'title' => 'کارمزد تأمین و ارسال', 'qty' => 1, 'unit_price' => 850000, 'total' => 850000 ] ],
            'part_lines' => [ [ 'title' => 'Copeland ZR190KCE', 'qty' => 1, 'unit_price' => 16800000, 'total' => 16800000 ] ],
            'paid' => 6000000,
        ],
        'after' => function ( int $req_id ) use ( $wpdb, $senior_id, $supplier_ids ) {
            $po = $wpdb->get_row( $wpdb->prepare(
                "SELECT id FROM {$wpdb->prefix}svc_parts_orders WHERE request_id=%d", $req_id
            ), ARRAY_A );
            if ( ! $po ) return null;
            $best = $supplier_ids[2]; // قیمت مناسب آسیا
            hvac_act_as( $senior_id );
            hvac_data( SR_Controller::update_parts_order( hvac_req( 'PUT', [
                'status'      => 'quoted',
                'quote_price' => $best['price'],
                'eta_days'    => $best['lead_days'],
                'supplier_id' => $best['user_id'],
                'notes'       => DEMO_MARKER . ' | پیش‌فاکتور ZR190 — ۵ تأمین‌کننده مقایسه شد',
            ], [ 'id' => (int) $po['id'] ] ) ) );
            hvac_data( SR_Controller::update_parts_order( hvac_req( 'PUT', [
                'status' => 'shipped',
                'notes'  => DEMO_MARKER . ' | ارسال شد',
            ], [ 'id' => (int) $po['id'] ] ) ) );
            hvac_reset();
            $quote = Svc_Algorithm::quote_parts( [ 'part_number' => 'ZR190KCE', 'part_qty' => 1 ] );
            return [
                'step'       => 'پیش‌فاکتور و ارسال',
                'parts_order_id' => (int) $po['id'],
                'suppliers'  => count( $quote['suppliers'] ?? [] ),
                'best_price' => $best['price'],
            ];
        },
    ],
    'equipment' => [
        'title' => 'خرید تجهیز — چیلر کارخانه جدید',
        'icon'  => '🏭',
        'ui'    => 'عملیات → استعلام تجهیز · ۳ پیشنهاد با COP',
        'tech'  => $tech_id,
        'visitor' => [
            'session_key' => $session_base . '_equip',
            'name' => 'مهندس لیلا مرادی',
            'company' => 'کارخانه تولیدی نوآوران',
            'phone' => DEMO_PHONE,
            'email' => $customer_common['email'],
            'address' => 'یزد، شهرک صنعتی جهان‌آباد',
            'site_label' => 'پروژه چیلر کارخانه نوآوران',
            'service_type' => 'equipment_purchase',
            'project_city' => 'یزد',
            'application' => 'صنعتی',
            'required_capacity' => '۱۲۰ تن (بار محاسبه‌شده)',
            'budget_range' => '۱۲ تا ۱۸ میلیارد',
            'space_constraints' => 'مساحت موتورخانه ۱۸۰م²، دمای محیط تابستان ۴۲°C، کارکرد ۱۸ ساعت/روز',
            'complaint_text' => '[دمو HVAC] پروژه چیلر جدید — محاسبه بار سرمایشی و ۳ پیشنهاد اقتصادی/استاندارد/بازده‌بالا.',
            '_demo_extra' => [
                'cooling_load_tr' => 118,
                'area_m2' => 180,
                'ambient_c' => 42,
                'hours_per_day' => 18,
            ],
        ],
        'srd' => [
            'diagnosis' => 'بار سرمایشی تقریبی ۱۱۸ تن تبرید. سه پیشنهاد با COP و توان مصرفی ارائه شد. گزینه استاندارد انتخاب و راه‌اندازی شد.',
            'service_lines' => [
                [ 'title' => 'محاسبه بار و مشاوره خرید', 'qty' => 1, 'unit_price' => 6500000, 'total' => 6500000 ],
                [ 'title' => 'راه‌اندازی و commissioning', 'qty' => 1, 'unit_price' => 12000000, 'total' => 12000000 ],
            ],
            'paid' => 5000000,
            'discount' => 500000,
        ],
        'after' => function ( int $req_id ) use ( $wpdb, $senior_id ) {
            $eq = $wpdb->get_row( $wpdb->prepare(
                "SELECT id FROM {$wpdb->prefix}svc_equipment_inquiries WHERE request_id=%d", $req_id
            ), ARRAY_A );
            if ( ! $eq ) return null;
            $options = [
                [
                    'key' => 'economy', 'label' => 'اقتصادی', 'tier' => 'economy',
                    'brand' => 'Gree', 'model' => 'LSBLV-120', 'capacity' => '120 تن',
                    'cop' => 3.1, 'power_kw' => 138, 'price' => 12500000000,
                ],
                [
                    'key' => 'standard', 'label' => 'استاندارد', 'tier' => 'standard',
                    'brand' => 'Carrier', 'model' => '30RB-120', 'capacity' => '120 تن',
                    'cop' => 3.6, 'power_kw' => 118, 'price' => 15200000000,
                ],
                [
                    'key' => 'high_efficiency', 'label' => 'بازده بالا', 'tier' => 'high_efficiency',
                    'brand' => 'Daikin', 'model' => 'EWAD-TZ-120', 'capacity' => '120 تن',
                    'cop' => 4.2, 'power_kw' => 98, 'price' => 17800000000,
                ],
            ];
            hvac_act_as( $senior_id );
            hvac_data( SR_Controller::update_equipment_inquiry( hvac_req( 'PUT', [
                'status'          => 'quoted',
                'quote_options'   => $options,
                'selected_option' => 'standard',
                'notes'           => DEMO_MARKER . ' | مقایسه COP/توان/قیمت — سفارش گزینه استاندارد',
            ], [ 'id' => (int) $eq['id'] ] ) ) );
            hvac_data( SR_Controller::update_equipment_inquiry( hvac_req( 'PUT', [
                'status' => 'installed',
                'notes'  => DEMO_MARKER . ' | commissioning انجام شد',
                'order_value' => 15200000000,
            ], [ 'id' => (int) $eq['id'] ] ) ) );
            hvac_reset();
            return [ 'step' => '۳ پیشنهاد + commissioning', 'inquiry_id' => (int) $eq['id'], 'options' => $options ];
        },
    ],
    'survey' => [
        'title' => 'بازدید سایت — مرکز خرید',
        'icon'  => '🔍',
        'ui'    => 'گزارش عمومی PDF · در صورت نیاز پیش‌فاکتور تعمیر خودکار',
        'tech'  => $tech_screw,
        'visitor' => [
            'session_key' => $session_base . '_survey',
            'name' => 'خانم سارا امینی',
            'company' => 'مرکز خرید پاسارگاد',
            'phone' => DEMO_PHONE,
            'email' => $customer_common['email'],
            'address' => 'تهران، سعادت‌آباد، میدان کاج',
            'site_label' => 'پاساژ پاسارگاد — بام و موتورخانه',
            'service_type' => 'site_visit',
            'device_type' => 'چیلر',
            'brand' => 'York',
            'model' => 'YVAA',
            'capacity' => '۲۵۰ تن',
            'refrigerant' => 'R134a',
            'complaint_text' => '[دمو HVAC] بازدید کارشناسی مرکز خرید — عکس/ویدیو/فشار/دما و گزارش PDF.',
            '_demo_extra' => [
                'photo_refs' => [ 'roof-chiller-01.jpg', 'gauge-suction.jpg', 'gauge-discharge.jpg' ],
                'readings' => [ 'suction' => '3.0 bar', 'discharge' => '11.8 bar', 'supply_air' => '14°C', 'return_air' => '24°C' ],
            ],
        ],
        'srd' => [
            'diagnosis' => "بازدید میدانی:\n• عکس کویل و گیج‌ها ثبت شد\n• ساکشن ۳.۰ / دیسشارژ ۱۱.۸ bar\n• دمای رفت ۱۴ و برگشت ۲۴\nنیاز به تعمیر فن کندانسور — پیش‌فاکتور تعمیر پیوست.",
            'service_lines' => [ [ 'title' => 'بازدید کارشناس میدانی + گزارش PDF', 'qty' => 1, 'unit_price' => 2800000, 'total' => 2800000 ] ],
            'extra_costs' => [ [ 'title' => 'ایاب‌ذهاب تهران', 'amount' => 450000 ] ],
            'recommendations' => [ 'تعمیر فن کندانسور ضروری است', 'پیش‌فاکتور تعمیر به‌صورت خودکار پیشنهاد شد' ],
            'paid' => 0,
            'tech_signature' => 'سعید نوری',
        ],
        'after' => function ( int $req_id, int $report_id, array $d ) use ( $wpdb, $senior_id, $tech_screw, $session_base ) {
            // پیش‌فاکتور تعمیر خودکار
            hvac_reset();
            $repair = hvac_data( SR_Controller::visitor_create_request( hvac_req( 'POST', [
                'session_key' => $session_base . '_survey_repair',
                'name' => 'خانم سارا امینی',
                'company' => 'مرکز خرید پاسارگاد',
                'phone' => DEMO_PHONE,
                'email' => 'hvac-demo@applied.test',
                'address' => 'تهران، سعادت‌آباد',
                'site_label' => 'پاساژ پاسارگاد — پیرو بازدید',
                'service_type' => 'repair',
                'priority' => 'normal',
                'device_type' => 'چیلر',
                'brand' => 'York',
                'model' => 'YVAA',
                'complaint_text' => '[دمو HVAC] پیش‌فاکتور تعمیر خودکار پس از بازدید — تعویض فن کندانسور.',
            ] ) ) );
            if ( empty( $repair['success'] ) ) {
                return [ 'step' => 'پیش‌فاکتور تعمیر ناموفق', 'error' => $repair['message'] ?? '' ];
            }
            $rid = (int) $repair['data']['id'];
            $wpdb->update( "{$wpdb->prefix}svc_requests", [
                'extra_data' => wp_json_encode( [
                    'demo_key' => DEMO_MARKER,
                    'from_survey' => $req_id,
                    'proforma' => true,
                    'proforma_parts' => [ [ 'title' => 'فن کندانسور', 'price' => 8500000 ] ],
                    'proforma_labor' => 3500000,
                ], JSON_UNESCAPED_UNICODE ),
                'cost_estimate' => 12000000,
            ], [ 'id' => $rid ] );
            hvac_act_as( $senior_id );
            hvac_data( SR_Controller::assign_request( hvac_req( 'POST', [
                'technician_id' => $tech_screw,
                'status' => 'assigned',
                'scheduled_at' => date( 'Y-m-d H:i:s', strtotime( '+2 days 11:00' ) ),
                'dispatch_notes' => 'پیش‌فاکتور از بازدید — دمو HVAC',
            ], [ 'id' => $rid ] ) ) );
            hvac_reset();
            return [
                'step' => 'گزارش PDF + پیش‌فاکتور تعمیر',
                'survey_tracking' => $d['tracking_code'],
                'repair_tracking' => $repair['data']['tracking_code'],
                'public_url' => Service_Report_Render::public_url(
                    (string) $wpdb->get_var( $wpdb->prepare(
                        "SELECT public_token FROM {$wpdb->prefix}svc_reports WHERE id=%d", $report_id
                    ) )
                ),
            ];
        },
    ],
    'contract' => [
        'title' => 'پشتیبانی قراردادی — پتروشیمی',
        'icon'  => '📋',
        'ui'    => 'پرونده مشتری · نیروی کار رایگان، فقط قطعه خارج پوشش فاکتور',
        'tech'  => $tech_id,
        'visitor' => [
            'session_key' => $session_base . '_contract',
            'name' => 'مهندس بهرام کریمی',
            'company' => 'مجتمع پتروشیمی خلیج فارس',
            'phone' => DEMO_PHONE,
            'email' => $customer_common['email'],
            'address' => 'عسلویه، منطقه ویژه اقتصادی انرژی پارس',
            'site_label' => 'پتروشیمی — واحد یوتیلیتی',
            'service_type' => 'contract_support',
            'contract_no' => 'HVAC-PETRO-1403-3Y',
            'complaint_text' => '[دمو HVAC] ادعای تحت پوشش قرارداد ۳ ساله — اعزام رایگان نیرو، فقط قطعات خارج قرارداد فاکتور شود.',
            '_demo_extra' => [
                'contract' => [
                    'no' => 'HVAC-PETRO-1403-3Y',
                    'years' => 3,
                    'covers' => [ 'labor', 'pm_visits', 'emergency_dispatch' ],
                    'excludes' => [ 'compressor', 'heat_exchanger' ],
                    'equipment' => [ '۳ چیلر اسکرو', '۱۲ AHU' ],
                    'warranty_until' => date( 'Y-m-d', strtotime( '+2 years' ) ),
                    'annual_cost' => 420000000,
                ],
            ],
        ],
        'srd' => [
            'diagnosis' => 'ادعای قرارداد تأیید شد. نیروی کار تحت پوشش (رایگان). سنسور فشار خارج از لیست پوشش — فقط قطعه فاکتور شد.',
            'service_lines' => [ [ 'title' => 'نیروی کار قراردادی (تحت پوشش — رایگان)', 'qty' => 1, 'unit_price' => 0, 'total' => 0 ] ],
            'part_lines' => [ [ 'title' => 'سنسور فشار (خارج از پوشش قرارداد)', 'qty' => 1, 'unit_price' => 2800000, 'total' => 2800000 ] ],
            'recommendations' => [ 'قطعات اصلی کمپرسور همچنان خارج از پوشش است', 'تاریخ سرویس بعدی طبق قرارداد ثبت شد' ],
            'paid' => 2800000,
        ],
    ],
];

foreach ( $definitions as $key => $def ) {
    try {
        $visitor = $def['visitor'];
        unset( $visitor['_demo_extra'] );
        // _demo_extra را جدا نگه می‌داریم برای merge بعد از create
        $visitor_full = $def['visitor'];
        $case = hvac_run_case(
            $key,
            $visitor_full['service_type'],
            $def['title'],
            $visitor_full,
            $def['srd'],
            $senior_id,
            (int) ( $def['tech'] ?? $tech_id ),
            $def['after'] ?? null
        );
        $case['icon'] = $def['icon'];
        $case['ui_hint'] = $def['ui'];
        $cases[] = $case;
        $log[] = [ 'ok' => true, 'title' => $def['title'], 'data' => [
            'tracking_code' => $case['tracking_code'],
            'report_no' => $case['report_no'],
            'total' => $case['total'],
        ] ];
    } catch ( Throwable $e ) {
        $log[] = [ 'ok' => false, 'title' => $def['title'], 'error' => $e->getMessage() ];
    }
}

// نمونه دستیار
$assist_sample = Svc_Algorithm::detect_service_intent(
    'کمپرسور چیلر اسکرو Carrier هر ۱۵ دقیقه با خطای High Condensing Pressure قطع می‌شود'
);
$assist_sample['analysis'] = Svc_Algorithm::analyze_consult( [
    'service_type' => 'phone_consult',
    'complaint_text' => 'High Condensing Pressure، ساکشن ۳.۲ دیسشارژ ۱۲',
    'error_code' => 'High Condensing Pressure',
    'suction_pressure' => '3.2',
    'discharge_pressure' => '12',
    'name' => 'دمو', 'phone' => DEMO_PHONE, 'site_label' => 'دمو',
] );

$summary = [
    'demo_batch'     => DEMO_BATCH,
    'customer_phone' => DEMO_PHONE,
    'customer_login'=> 'ورود مشتری با موبایل ' . DEMO_PHONE . ' (بدون رمز)',
    'wipe'           => $wipe,
    'cases_count'    => count( $cases ),
    'cases'          => array_map( static function ( $c ) {
        return [
            'key'           => $c['key'],
            'icon'          => $c['icon'] ?? '',
            'title'         => $c['title'],
            'service_type'  => $c['service_type'],
            'tracking_code' => $c['tracking_code'],
            'report_no'     => $c['report_no'],
            'total'         => $c['total'],
            'balance'       => $c['balance'],
            'public_url'    => $c['public_url'],
            'pay_url'       => $c['pay_url'],
            'ui_hint'       => $c['ui_hint'],
        ];
    }, $cases ),
    'assistant' => [
        'endpoint' => $base . '/api.php/acc/v1/service/visitor/assist',
        'sample'   => $assist_sample,
    ],
    'suppliers_zr190' => $supplier_ids,
    'logins' => [
        'customer_phone' => DEMO_PHONE,
        'senior'         => 'svc_senior_demo / ' . DEMO_PASS,
        'tech'           => 'svc_tech1_demo / ' . DEMO_PASS,
        'tech_screw'     => 'svc_tech_screw / ' . DEMO_PASS,
        'suppliers'      => array_map( static fn( $s ) => $s['login'] . ' / ' . DEMO_PASS, $supplier_ids ),
    ],
    'links' => [
        'portal'   => $base . '/service.php#ha-demos',
        'erp'      => $base . '/index.php#service',
        'seed'     => $base . '/run-service-hvac-demo-seed.php',
        'json'     => $base . '/docs/service/hvac-demo-scenarios.json',
    ],
    'how_to_test' => [
        '1. باز کردن service.php → بخش «سناریوهای دمو»',
        '2. ورود مشتری با ' . DEMO_PHONE . ' → پرونده من (۷+ پرونده)',
        '3. ارشد: svc_senior_demo → عملیات میدانی',
        '4. متخصص اسکرو: svc_tech_screw',
        '5. دستیار: کادر متن آزاد در لندینگ یا POST /service/visitor/assist',
        '6. قطعات ZR190: ویجت → تأمین قطعات → استعلام موجودی',
    ],
];

$json_path = __DIR__ . '/docs/service/hvac-demo-scenarios.json';
if ( ! is_dir( dirname( $json_path ) ) ) {
    mkdir( dirname( $json_path ), 0755, true );
}
file_put_contents(
    $json_path,
    json_encode( [ 'summary' => $summary, 'cases' => $cases, 'log' => $log ], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT )
);

render:
header( 'Content-Type: text/html; charset=utf-8' );
?>
<!DOCTYPE html>
<html dir="rtl" lang="fa">
<head>
    <meta charset="utf-8">
    <title>Seed دمو HVAC — ۷ سناریو + دستیار</title>
    <style>
        body { font-family: Tahoma, sans-serif; background: #f1f5f9; padding: 24px; max-width: 980px; margin: 0 auto; }
        h1 { color: #0c4a6e; }
        .card { background: #fff; border: 1px solid #e2e8f0; border-radius: 12px; padding: 16px; margin: 12px 0; }
        .ok { border-right: 4px solid #22c55e; }
        .err { border-right: 4px solid #ef4444; background: #fef2f2; }
        table { width: 100%; border-collapse: collapse; font-size: 13px; }
        td, th { border: 1px solid #e2e8f0; padding: 8px; text-align: right; }
        th { background: #e0f2fe; }
        .badge { font-family: monospace; background: #0369a1; color: #fff; padding: 3px 10px; border-radius: 6px; }
        code { background: #f1f5f9; padding: 2px 6px; border-radius: 4px; }
        a { color: #0369a1; }
    </style>
</head>
<body>
<h1>✅ Seed دمو HVAC Applied</h1>
<p>موبایل مشتری دمو: <b dir="ltr"><?= htmlspecialchars( DEMO_PHONE ) ?></b> — بدون رمز، از پورتال مشتری وارد شوید.</p>

<div class="card ok">
    <h2>🔑 ورود تست</h2>
    <ul>
        <li>مشتری: موبایل <code><?= DEMO_PHONE ?></code></li>
        <li>ارشد: <code>svc_senior_demo / <?= DEMO_PASS ?></code></li>
        <li>کارشناس: <code>svc_tech1_demo / <?= DEMO_PASS ?></code></li>
        <li>متخصص اسکرو: <code>svc_tech_screw / <?= DEMO_PASS ?></code></li>
        <li>پورتال: <a href="<?= htmlspecialchars( $base . '/service.php#ha-demos' ) ?>">service.php#ha-demos</a></li>
    </ul>
</div>

<?php if ( ! empty( $cases ) ): ?>
<div class="card ok">
    <h2>📋 سناریوها</h2>
    <table>
        <tr><th>سناریو</th><th>کد پیگیری</th><th>گزارش</th><th>مبلغ</th><th>لینک</th></tr>
        <?php foreach ( $cases as $c ): ?>
        <tr>
            <td><?= htmlspecialchars( ( $c['icon'] ?? '' ) . ' ' . $c['title'] ) ?></td>
            <td><span class="badge"><?= htmlspecialchars( $c['tracking_code'] ) ?></span></td>
            <td><code><?= htmlspecialchars( $c['report_no'] ) ?></code></td>
            <td><?= number_format( (float) $c['total'] ) ?> ت</td>
            <td><a href="<?= htmlspecialchars( $c['public_url'] ) ?>" target="_blank">گزارش</a></td>
        </tr>
        <?php endforeach; ?>
    </table>
</div>
<?php endif; ?>

<h2>جزئیات</h2>
<?php foreach ( $log as $s ): ?>
<div class="card <?= ! empty( $s['ok'] ) ? 'ok' : 'err' ?>">
    <h3><?= ! empty( $s['ok'] ) ? '✅' : '❌' ?> <?= htmlspecialchars( $s['title'] ) ?></h3>
    <?php if ( empty( $s['ok'] ) ): ?>
        <p style="color:#991b1b;"><?= htmlspecialchars( $s['error'] ?? '' ) ?></p>
    <?php else: ?>
        <pre style="direction:ltr;text-align:left;font-size:11px;background:#f8fafc;padding:8px;overflow:auto;"><?= htmlspecialchars( json_encode( $s['data'] ?? [], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT ) ) ?></pre>
    <?php endif; ?>
</div>
<?php endforeach; ?>

<p style="font-size:12px;color:#64748b;">JSON: docs/service/hvac-demo-scenarios.json</p>
</body>
</html>
