<?php
/**
 * Demo سلسله‌مراتب کارشناس ارشد / کارشناس میدانی
 * http://localhost/acc-engine/run-service-team-demo.php
 *
 * C:\xampp\php\php.exe C:\xampp\htdocs\acc-engine\run-service-team-demo.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/controllers/SR_Controller.php';
require_once ACC_PATH . 'includes/controllers/Chat_Controller.php';

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

const DEMO_PASS = 'Demo@2026';

function demo_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 demo_data( WP_REST_Response $res ): array {
    $d = $res->get_data();
    return is_array( $d ) ? $d : [ 'raw' => $d ];
}

function demo_step( string $title, callable $fn ): array {
    try {
        $out = $fn();
        return [ 'ok' => true, 'title' => $title, 'data' => $out ];
    } catch ( Throwable $e ) {
        return [ 'ok' => false, 'title' => $title, 'error' => $e->getMessage() ];
    }
}

function demo_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 demo_reset_actor(): void {
    $GLOBALS['acc_current_user'] = null;
    unset( $GLOBALS['acc_jwt_user_id'] );
}

function demo_ensure_user( string $login, string $display, string $email ): int {
    global $wpdb;

    // پاکسازی رکورد خراب با ID=0 (مشکل lastInsertId در برخی سرورها)
    $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 ) {
        $wpdb->update( $wpdb->users, [
            'display_name' => $display,
            'user_email'   => $email,
        ], [ 'ID' => $id ] );
        return $id;
    }

    $new_id  = (int) $wpdb->get_var( "SELECT COALESCE( MAX( ID ), 0 ) + 1 FROM {$wpdb->users}" );
    $nicename = preg_replace( '/[^a-z0-9-]/', '-', strtolower( $login ) ) ?: $login;
    $wpdb->insert( $wpdb->users, [
        'ID'                => $new_id,
        'user_login'        => $login,
        'user_pass'         => password_hash( DEMO_PASS, PASSWORD_BCRYPT ),
        'user_nicename'     => $nicename,
        'user_email'        => $email,
        'user_url'          => '',
        'user_registered'   => current_time( 'mysql' ),
        'user_activation_key' => '',
        'user_status'       => 0,
        'display_name'      => $display,
    ] );
    if ( ! $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM {$wpdb->users} WHERE ID = %d", $new_id ) ) ) {
        throw new RuntimeException( 'ایجاد کاربر ناموفق: ' . ( $wpdb->last_error ?: $login ) );
    }
    return $new_id;
}

function demo_assign_role( int $user_id, string $role_slug ): void {
    global $wpdb;
    $role_id = (int) $wpdb->get_var( $wpdb->prepare(
        "SELECT id FROM {$wpdb->prefix}acl_roles WHERE slug = %s", $role_slug
    ) );
    if ( ! $role_id ) {
        throw new RuntimeException( "نقش {$role_slug} یافت نشد — ابتدا run-service-migrate.php را اجرا کنید" );
    }
    $exists = $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'",
        $user_id, $role_id
    ) );
    if ( ! $exists ) {
        $wpdb->insert( "{$wpdb->prefix}acl_user_roles", [
            'user_id'    => $user_id,
            'role_id'    => $role_id,
            'scope_type' => 'global',
            'scope_id'   => null,
        ] );
    }
}

$log    = [];
$base   = rtrim( ACC_URL, '/' );
$stamp  = date( 'Ymd_His' );
$session_key = 'team_demo_' . $stamp;
$tracking_code   = '';
$request_no      = '';
$request_id      = 0;
$conversation_id = 0;
$report_no       = '';
$public_token    = '';
$users_step      = [ 'ok' => false, 'data' => [] ];

$demo_customer = [
    'name'    => 'خانم مریم نادری',
    'company' => 'سوپرمارکت رفاه — شعبه ونک',
    'phone'   => '09129876543',
    'email'   => 'demo-team@refah.test',
    'address' => 'تهران، ونک، خیابان ملاصدرا، پلاک ۸۸',
    'site'    => 'سردخانه ویترین — طبقه همکف',
    'complaint' => 'دمای ویترین تا ۱۲ درجه بالا می‌آید. آلارم کمپرسور چند بار در شب فعال شده.',
    'tags'    => [ 'دمای بالا', 'آلارم کمپرسور' ],
    'device'  => [
        'device_type'      => 'ویترین سردخانه',
        'brand'            => 'Turbo Air',
        'model'            => 'TOM-48SD',
        'serial_no'        => 'TA-TEAM-DEMO-001',
        'capacity'         => '۴۸ فوت',
        'refrigerant'      => 'R134a',
        'install_location' => 'ویترین جلوی فروشگاه',
    ],
];

// ── ۰. اطمینان از جدول تیم ──
$log[] = demo_step( '۰. بررسی جدول svc_technician_teams', function () {
    if ( ! Svc_Teams::table_exists() ) {
        throw new RuntimeException( 'جدول تیم وجود ندارد — run-service-migrate.php را اجرا کنید' );
    }
    return [ 'table' => Svc_Teams::table(), 'ok' => true ];
} );

// ── ۱. ساخت کاربران تست ──
$users_step = demo_step( '۱. ساخت کاربران تست (ارشد + ۲ کارشناس)', function () {
    $senior_id = demo_ensure_user( 'svc_senior_demo', 'علی رضایی — کارشناس ارشد', 'senior.demo@test.local' );
    $tech1_id  = demo_ensure_user( 'svc_tech1_demo', 'رضا موسوی — کارشناس میدانی ۱', 'tech1.demo@test.local' );
    $tech2_id  = demo_ensure_user( 'svc_tech2_demo', 'امیر حسینی — کارشناس میدانی ۲', 'tech2.demo@test.local' );

    demo_assign_role( $senior_id, 'service_senior' );
    demo_assign_role( $tech1_id, 'service_technician' );
    demo_assign_role( $tech2_id, 'service_technician' );

    return [
        'senior' => [ 'id' => $senior_id, 'login' => 'svc_senior_demo', 'password' => DEMO_PASS ],
        'tech1'  => [ 'id' => $tech1_id,  'login' => 'svc_tech1_demo',  'password' => DEMO_PASS ],
        'tech2'  => [ 'id' => $tech2_id,  'login' => 'svc_tech2_demo',  'password' => DEMO_PASS ],
    ];
} );
$log[] = $users_step;
if ( ! $users_step['ok'] ) {
    goto render;
}

$senior_id = (int) $users_step['data']['senior']['id'];
$tech1_id  = (int) $users_step['data']['tech1']['id'];
$tech2_id  = (int) $users_step['data']['tech2']['id'];

// ── ۲. تشکیل تیم ──
$log[] = demo_step( '۲. کارشناس ارشد — افزودن کارشناسان به تیم', function () use ( $senior_id, $tech1_id, $tech2_id ) {
    demo_act_as( $senior_id );
    Svc_Teams::add_team_member( $senior_id, $tech1_id );
    Svc_Teams::add_team_member( $senior_id, $tech2_id );
    $res = SR_Controller::senior_team_list( demo_req( 'GET' ) );
    demo_reset_actor();
    $team = demo_data( $res )['data'] ?? [];
    return [
        'senior_id'   => $senior_id,
        'team_size'   => count( $team ),
        'members'     => array_map( fn( $t ) => $t['technician_name'] ?? $t['technician_user_id'], $team ),
        'tech1_in_team' => Svc_Teams::can_access_technician( $senior_id, $tech1_id ),
        'tech2_in_team' => Svc_Teams::can_access_technician( $senior_id, $tech2_id ),
    ];
} );

// ── ۳. مشتری — ثبت درخواست از ویجت ──
$req_step = demo_step( '۳. مشتری — ثبت درخواست (ویجت)', function () use ( $demo_customer, $session_key ) {
    demo_reset_actor();
    $res = SR_Controller::visitor_create_request( demo_req( 'POST', [
        'session_key'      => $session_key,
        'name'             => $demo_customer['name'],
        'company'          => $demo_customer['company'],
        'phone'            => $demo_customer['phone'],
        'email'            => $demo_customer['email'],
        'address'          => $demo_customer['address'],
        'site_label'       => $demo_customer['site'],
        'service_type'     => 'repair',
        'complaint_text'   => $demo_customer['complaint'],
        'complaint_tags'   => $demo_customer['tags'],
        'device_type'      => $demo_customer['device']['device_type'],
        'brand'            => $demo_customer['device']['brand'],
        'model'            => $demo_customer['device']['model'],
        'serial_no'        => $demo_customer['device']['serial_no'],
        'capacity'         => $demo_customer['device']['capacity'],
        'refrigerant'      => $demo_customer['device']['refrigerant'],
        'install_location' => $demo_customer['device']['install_location'],
    ] ) );
    $data = demo_data( $res );
    if ( empty( $data['success'] ) ) {
        throw new RuntimeException( $data['message'] ?? 'ثبت درخواست ناموفق' );
    }
    return $data['data'];
} );
$log[] = $req_step;
if ( ! $req_step['ok'] ) {
    goto render;
}

$request_id      = (int) $req_step['data']['id'];
$tracking_code   = $req_step['data']['tracking_code'];
$request_no      = $req_step['data']['request_no'] ?? '';
$conversation_id = (int) ( $req_step['data']['conversation_id'] ?? 0 );

// ── ۴. مشتری — پیام در چت ──
$log[] = demo_step( '۴. مشتری — ارسال پیام در چت ویجت', function () use ( $session_key, $conversation_id ) {
    $res = Chat_Controller::visitor_message( demo_req( 'POST', [
        'session_key' => $session_key,
        'room_id'     => $conversation_id,
        'body'        => 'سلام، سردخانه ویترین از دیشب مشکل دارد. لطفاً هرچه زودتر کارشناس بفرستید.',
    ] ) );
    $data = demo_data( $res );
    if ( empty( $data['success'] ) ) {
        throw new RuntimeException( $data['message'] ?? 'ارسال پیام ناموفق' );
    }
    return [ 'message_id' => $data['data']['id'] ?? 0, 'conversation_id' => $conversation_id ];
} );

// ── ۵. کارشناس ارشد — داشبورد و نقش ──
$log[] = demo_step( '۵. کارشناس ارشد — بررسی نقش و داشبورد', function () use ( $senior_id ) {
    demo_act_as( $senior_id );
    $role = demo_data( SR_Controller::my_service_role( demo_req( 'GET' ) ) )['data'] ?? [];
    $dash = demo_data( SR_Controller::senior_dashboard( demo_req( 'GET' ) ) )['data'] ?? [];
    demo_reset_actor();
    return [
        'role'       => $role['role'] ?? '',
        'is_senior'  => $role['is_senior'] ?? false,
        'team_size'  => $dash['team_size'] ?? 0,
        'open'       => $dash['open'] ?? 0,
    ];
} );

// ── ۶. کارشناس ارشد — Dispatch تخصیص به کارشناس ۱ ──
$scheduled = date( 'Y-m-d H:i:s', strtotime( '+1 day 09:00' ) );
$log[] = demo_step( '۶. کارشناس ارشد — Dispatch (تخصیص به رضا موسوی)', function () use ( $senior_id, $request_id, $tech1_id, $scheduled ) {
    demo_act_as( $senior_id );
    $res = SR_Controller::assign_request( demo_req( 'POST', [
        'technician_id'  => $tech1_id,
        'status'         => 'assigned',
        'scheduled_at'   => $scheduled,
        'dispatch_notes' => 'اولویت: ویترین فروشگاه — مشتری منتظر است.',
    ], [ 'id' => $request_id ] ) );
    demo_reset_actor();
    $data = demo_data( $res );
    $row  = $data['data'] ?? $data;
    return [
        'assigned_technician_id' => $row['assigned_technician_id'] ?? null,
        'status'                 => $row['status'] ?? '',
        'scheduled_at'           => $row['scheduled_at'] ?? '',
    ];
} );

// ── ۷. بررسی اتصال چت به کارشناس ──
$log[] = demo_step( '۷. اتصال خودکار چت به کارشناس تخصیص‌یافته', function () use ( $conversation_id, $tech1_id ) {
    global $wpdb;
    $conv = $wpdb->get_row( $wpdb->prepare(
        "SELECT agent_id FROM {$wpdb->prefix}chat_conversations WHERE id = %d", $conversation_id
    ), ARRAY_A );
    $sys = (int) $wpdb->get_var( $wpdb->prepare(
        "SELECT COUNT(*) FROM {$wpdb->prefix}chat_messages
         WHERE conversation_id = %d AND sender_type = 'system'", $conversation_id
    ) );
    return [
        'conversation_id' => $conversation_id,
        'agent_id'        => (int) ( $conv['agent_id'] ?? 0 ),
        'expected'        => $tech1_id,
        'sync_ok'         => (int) ( $conv['agent_id'] ?? 0 ) === $tech1_id,
        'system_messages' => $sys,
    ];
} );

// ── ۸. کارشناس ۱ — صف کار و پاسخ به مشتری ──
$log[] = demo_step( '۸. کارشناس ۱ — صف کار + پاسخ در همان thread چت', function () use ( $tech1_id, $conversation_id ) {
    demo_act_as( $tech1_id );
    $queue = demo_data( SR_Controller::technician_my_queue( demo_req( 'GET' ) ) )['data'] ?? [];
    $reply = Chat_Controller::support_reply( demo_req( 'POST', [
        'body' => 'سلام خانم نادری، من رضا موسوی هستم. فردا ساعت ۹ صبح در محل حضور خواهم داشت. لطفاً دسترسی به اتاق کمپرسور را آماده کنید.',
    ], [ 'id' => $conversation_id ] ) );
    demo_reset_actor();
    $reply_data = demo_data( $reply );
    return [
        'queue_count'   => count( $queue ),
        'tracking_in_queue' => array_column( $queue, 'tracking_code' ),
        'reply_ok'      => $reply_data['success'] ?? false,
        'reply_msg_id'  => $reply_data['data']['id'] ?? 0,
    ];
} );

// ── ۹. کارشناس ۲ — نباید به این پرونده دسترسی داشته باشد ──
$log[] = demo_step( '۹. کارشناس ۲ — محدودیت دسترسی (صف خالی + پاسخ ممنوع)', function () use ( $tech2_id, $conversation_id, $tracking_code ) {
    demo_act_as( $tech2_id );
    $queue = demo_data( SR_Controller::technician_my_queue( demo_req( 'GET' ) ) )['data'] ?? [];
    $denied = Chat_Controller::support_reply( demo_req( 'POST', [
        'body' => 'این پیام نباید ارسال شود.',
    ], [ 'id' => $conversation_id ] ) );
    demo_reset_actor();
    return [
        'queue_count'     => count( $queue ),
        'has_this_request' => (bool) array_filter( $queue, fn( $r ) => ( $r['tracking_code'] ?? '' ) === $tracking_code ),
        'reply_blocked'   => $denied->get_status() === 403,
        'reply_message'   => demo_data( $denied )['message'] ?? '',
    ];
} );

// ── ۱۰. کارشناس ۱ — شروع کار میدانی ──
$log[] = demo_step( '۱۰. کارشناس ۱ — تغییر وضعیت به در حال انجام', function () use ( $tech1_id, $request_id ) {
    demo_act_as( $tech1_id );
    $res = SR_Controller::update_request( demo_req( 'PUT', [ 'status' => 'in_progress' ], [ 'id' => $request_id ] ) );
    demo_reset_actor();
    $row = demo_data( $res )['data'] ?? [];
    return [ 'status' => $row['status'] ?? '', 'status_label' => $row['status_label'] ?? '' ];
} );

// ── ۱۱. کارشناس ارشد — مشاهده گفتگوهای تیم در Live Chat ──
$log[] = demo_step( '۱۱. کارشناس ارشد — فیلتر گفتگوهای تیم در Live Chat', function () use ( $senior_id, $conversation_id ) {
    demo_act_as( $senior_id );
    $rooms = demo_data( Chat_Controller::support_rooms( demo_req( 'GET', [], [ 'status' => 'all' ] ) ) )['data'] ?? [];
    demo_reset_actor();
    $found = array_filter( $rooms, fn( $r ) => (int) ( $r['id'] ?? 0 ) === $conversation_id );
    return [
        'rooms_visible' => count( $rooms ),
        'team_conv_found' => count( $found ) > 0,
        'conversation_id' => $conversation_id,
    ];
} );

// ── ۱۲. پیگیری مشتری ──
$log[] = demo_step( '۱۲. مشتری — پیگیری وضعیت (visitor track)', function () use ( $tracking_code ) {
    demo_reset_actor();
    $res = SR_Controller::visitor_track( demo_req( 'GET', [], [ 'code' => $tracking_code ] ) );
    $data = demo_data( $res );
    if ( empty( $data['success'] ) ) {
        throw new RuntimeException( $data['message'] ?? 'پیگیری ناموفق' );
    }
    $row = $data['data'];
    return [
        'tracking_code' => $row['tracking_code'],
        'status'        => $row['status_label'] ?? $row['status'],
        'technician'    => $row['technician_name'] ?? '—',
        'timeline_steps'=> count( $row['timeline'] ?? [] ),
    ];
} );

// ── ۱۳. ایجاد و نهایی‌سازی SRD توسط کارشناس ۱ ──
$report_no = '';
$public_token = '';
$rpt_step = demo_step( '۱۳. کارشناس ۱ — گزارش فنی SRD و Finalize', function () use ( $tech1_id, $request_id, $demo_customer ) {
    demo_act_as( $tech1_id );
    $create = demo_data( SR_Controller::create_report( demo_req( 'POST', [ 'request_id' => $request_id ] ) ) );
    if ( empty( $create['success'] ) ) {
        throw new RuntimeException( 'ایجاد SRD ناموفق' );
    }
    $report_id = (int) $create['data']['id'];
    $payload = [
        'diagnosis_result'   => 'شیر انبساط یخ‌زده و جریان مبرد محدود شده بود. پس از تعویض شیر و شارژ گاز، دما پایدار شد.',
        'technical_readings' => [ 'room_temp_c' => -2, 'ambient_temp_c' => 28, 'suction_bar' => 1.8 ],
        'service_lines'      => [ [ 'desc' => 'عیب‌یابی و تعمیر ویترین', 'qty' => 1, 'unit_price' => 3200000, 'total' => 3200000 ] ],
        'part_lines'         => [ [ 'desc' => 'شیر انبساط R134a', 'qty' => 1, 'unit_price' => 1800000, 'total' => 1800000 ] ],
        'subtotal_services'  => 3200000,
        'subtotal_parts'     => 1800000,
        'total'              => 5000000,
        'paid'               => 0,
        'balance'            => 5000000,
        'report_date'        => current_time( 'Y-m-d' ),
        'tech_signature'     => 'رضا موسوی',
        'customer_signature' => 'مریم نادری',
    ];
    SR_Controller::save_report( demo_req( 'PUT', $payload, [ 'id' => $report_id ] ) );
    $fin = demo_data( SR_Controller::finalize_report( demo_req( 'POST', array_merge( $payload, [ 'warehouse_id' => 0 ] ), [ 'id' => $report_id ] ) ) );
    demo_reset_actor();
    if ( empty( $fin['success'] ) ) {
        throw new RuntimeException( $fin['message'] ?? 'Finalize ناموفق' );
    }
    $row = $fin['data'] ?? [];
    return [
        'report_id'    => $report_id,
        'report_no'    => $row['report_no'] ?? $create['data']['report_no'],
        'public_token' => $row['public_token'] ?? '',
        'total'        => $row['total'] ?? 5000000,
        'balance'      => $row['balance'] ?? 5000000,
    ];
} );
$log[] = $rpt_step;
if ( $rpt_step['ok'] ) {
    $report_no    = $rpt_step['data']['report_no'] ?? '';
    $public_token = $rpt_step['data']['public_token'] ?? '';
}

render:
$summary = [
    'scenario'        => 'سوپرمارکت رفاه — سلسله‌مراتب کارشناس ارشد',
    'tracking_code'   => $tracking_code ?? '',
    'request_no'      => $request_no ?? '',
    'request_id'      => $request_id ?? 0,
    'conversation_id' => $conversation_id ?? 0,
    'report_no'       => $report_no,
    'session_key'     => $session_key,
    'users'           => $users_step['data'] ?? [],
    'manual_test'     => [
        'senior_login' => 'svc_senior_demo / ' . DEMO_PASS . ' → ERP → خدمات میدانی → کارشناس ارشد + Dispatch',
        'tech1_login'  => 'svc_tech1_demo / ' . DEMO_PASS . ' → ویجت تب کارشناس یا ERP → چت مشتریان من',
        'tech2_login'  => 'svc_tech2_demo / ' . DEMO_PASS . ' → نباید پرونده ' . ( $tracking_code ?? '—' ) . ' را ببیند',
        'customer'     => 'ویجت → پیگیری → کد: ' . ( $tracking_code ?? '—' ),
    ],
    'links' => [
        'erp_service'   => $base . '/index.php#service',
        'erp_chat'      => $base . '/index.php#chat',
        'report_public' => $public_token ? ( $base . '/service-report.php?token=' . $public_token ) : '',
        'team_demo'     => $base . '/run-service-team-demo.php',
        'docs'          => $base . '/docs/service/',
    ],
];

$all_ok = ! array_filter( $log, fn( $s ) => ! $s['ok'] );

file_put_contents(
    __DIR__ . '/docs/service/team-demo-result.json',
    json_encode( [ 'summary' => $summary, 'steps' => $log, 'customer' => $demo_customer ], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT )
);

header( 'Content-Type: text/html; charset=utf-8' );
?>
<!DOCTYPE html>
<html dir="rtl" lang="fa">
<head>
    <meta charset="utf-8">
    <title>Demo تیم کارشناسان — نتیجه</title>
    <style>
        body { font-family: Tahoma, sans-serif; background: #f0f9ff; padding: 24px; max-width: 960px; margin: 0 auto; }
        h1 { color: #1e40af; }
        .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; }
        .flow { background: #eff6ff; padding: 16px; border-radius: 10px; font-size: 13px; line-height: 1.9; }
        code, pre { background: #f1f5f9; padding: 2px 6px; border-radius: 4px; font-size: 12px; }
        pre { padding: 12px; overflow: auto; direction: ltr; text-align: left; max-height: 200px; }
        a { color: #1d4ed8; }
        table { width: 100%; border-collapse: collapse; font-size: 13px; }
        td, th { border: 1px solid #e2e8f0; padding: 8px; text-align: right; }
        th { background: #eff6ff; }
        .badge { display: inline-block; background: #1d4ed8; color: #fff; padding: 6px 14px; border-radius: 20px; font-weight: 700; letter-spacing: 3px; font-family: monospace; }
        .cred { background: #fef3c7; border: 1px solid #fcd34d; padding: 12px; border-radius: 8px; }
    </style>
</head>
<body>
<h1><?= $all_ok ? '✅' : '⚠️' ?> Demo سلسله‌مراتب کارشناس ارشد</h1>
<p>سناریو: <b><?= htmlspecialchars( $summary['scenario'] ) ?></b></p>

<div class="card ok">
    <h2>🔄 جریان اجرا شده</h2>
    <div class="flow">
        مشتری (ویجت) ثبت درخواست + چت<br>
        ↓<br>
        کارشناس ارشد (علی رضایی) تیم را مدیریت می‌کند<br>
        ↓<br>
        Dispatch → تخصیص به رضا موسوی (کارشناس ۱)<br>
        ↓<br>
        چت خودکار به agent_id کارشناس ۱ متصل می‌شود<br>
        ↓<br>
        کارشناس ۱ در «صف کار من» پاسخ می‌دهد | کارشناس ۲ دسترسی ندارد<br>
        ↓<br>
        SRD + Finalize توسط کارشناس ۱
    </div>
</div>

<div class="card ok">
    <h2>🔑 کد پیگیری مشتری</h2>
    <p style="text-align:center;"><span class="badge"><?= htmlspecialchars( $summary['tracking_code'] ?: '—' ) ?></span></p>
    <table>
        <tr><th>شماره درخواست</th><td><code><?= htmlspecialchars( $summary['request_no'] ?: '—' ) ?></code></td></tr>
        <tr><th>گزارش SRD</th><td><code><?= htmlspecialchars( $summary['report_no'] ?: '—' ) ?></code></td></tr>
        <tr><th>شناسه گفتگو</th><td><code><?= (int) ( $summary['conversation_id'] ?? 0 ) ?></code></td></tr>
    </table>
</div>

<div class="card cred">
    <h2>👤 ورود دستی به ERP (تست UI)</h2>
    <table>
        <tr><th>نقش</th><th>نام کاربری</th><th>رمز</th><th>مسیر ERP</th></tr>
        <?php if ( ! empty( $summary['users']['senior'] ) ): ?>
        <tr>
            <td>کارشناس ارشد</td>
            <td><code><?= htmlspecialchars( $summary['users']['senior']['login'] ) ?></code></td>
            <td><code><?= DEMO_PASS ?></code></td>
            <td>خدمات میدانی → کارشناس ارشد / Dispatch</td>
        </tr>
        <tr>
            <td>کارشناس ۱ (تخصیص‌یافته)</td>
            <td><code><?= htmlspecialchars( $summary['users']['tech1']['login'] ) ?></code></td>
            <td><code><?= DEMO_PASS ?></code></td>
            <td>خدمات میدانی → صف کار من</td>
        </tr>
        <tr>
            <td>کارشناس ۲ (بدون دسترسی)</td>
            <td><code><?= htmlspecialchars( $summary['users']['tech2']['login'] ) ?></code></td>
            <td><code><?= DEMO_PASS ?></code></td>
            <td>نباید پرونده بالا را ببیند</td>
        </tr>
        <?php endif; ?>
    </table>
</div>

<div class="card ok">
    <h2>🔗 لینک‌ها</h2>
    <ul>
        <li><a href="<?= htmlspecialchars( $summary['links']['erp_service'] ) ?>" target="_blank">ERP → خدمات میدانی</a></li>
        <li><a href="<?= htmlspecialchars( $summary['links']['erp_chat'] ) ?>" target="_blank">ERP → چت و پشتیبانی</a></li>
        <?php if ( $summary['links']['report_public'] ): ?>
        <li><a href="<?= htmlspecialchars( $summary['links']['report_public'] ) ?>" target="_blank">گزارش عمومی SRD</a></li>
        <?php endif; ?>
        <li><a href="<?= htmlspecialchars( $summary['links']['docs'] ) ?>" target="_blank">مستندات آموزشی</a></li>
    </ul>
    <p><b>ویجت مشتری:</b> تب پیگیری → کد <span class="badge" style="font-size:14px;"><?= htmlspecialchars( $summary['tracking_code'] ?: '—' ) ?></span></p>
</div>

<h2>مراحل (<?= count( $log ) ?>)</h2>
<?php foreach ( $log as $s ): ?>
<div class="card <?= $s['ok'] ? 'ok' : 'err' ?>">
    <h3><?= $s['ok'] ? '✅' : '❌' ?> <?= htmlspecialchars( $s['title'] ) ?></h3>
    <?php if ( ! $s['ok'] ): ?>
        <p style="color:#991b1b;"><?= htmlspecialchars( $s['error'] ?? '' ) ?></p>
    <?php else: ?>
        <pre><?= htmlspecialchars( json_encode( $s['data'], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT ) ) ?></pre>
    <?php endif; ?>
</div>
<?php endforeach; ?>

<p style="font-size:11px;color:#94a3b8;">JSON: docs/service/team-demo-result.json</p>
</body>
</html>
