<?php
/**
 * داده تست بنگاه شهرستان و متخصصان ساختمان
 * C:\xampp\php\php.exe run-melk-county-specialists-seed.php
 * C:\xampp\php\php.exe run-melk-county-specialists-seed.php --reset
 */
declare(strict_types=1);

define('ACC_BASE_PATH', __DIR__);
require __DIR__ . '/standalone/bootstrap.php';
require_once ACC_PATH . 'includes/helpers/acl-functions.php';

header('Content-Type: application/json; charset=utf-8');
global $wpdb;

$reset = in_array('--reset', $argv ?? [], true);
$pre   = $wpdb->prefix;
$pass  = 'Melk1234';
$log   = ['users' => [], 'county_requests' => [], 'specialists' => []];

ob_start();
include __DIR__ . '/run-melk-extensions-install.php';
ob_end_clean();

if ( $reset ) {
    $wpdb->query("DELETE FROM {$pre}melk_county_requests");
    $wpdb->query("DELETE FROM {$pre}melk_building_specialists");
    $log['reset'] = true;
}

function mcs_role_id( string $slug ): int {
    global $wpdb;
    return (int) $wpdb->get_var($wpdb->prepare(
        "SELECT id FROM {$wpdb->prefix}acl_roles WHERE slug = %s", $slug
    ));
}

function mcs_ensure_user( string $login, string $name, string $email = '' ): int {
    global $wpdb, $pass, $log;
    $id = (int) $wpdb->get_var($wpdb->prepare(
        "SELECT ID FROM {$wpdb->users} WHERE user_login = %s", $login
    ));
    if ( $id ) {
        $wpdb->update("{$wpdb->users}", [
            'user_pass' => wp_hash_password($pass),
            'display_name' => $name,
        ], ['ID' => $id]);
        $log['users'][] = ['login' => $login, 'id' => $id, 'action' => 'updated_password'];
        return $id;
    }
    $max = (int) $wpdb->get_var("SELECT COALESCE(MAX(ID), 0) FROM {$wpdb->users}");
    $id  = $max + 1;
    $now = date('Y-m-d H:i:s');
    $wpdb->insert("{$wpdb->users}", [
        'ID' => $id, 'user_login' => $login,
        'user_pass' => wp_hash_password($pass),
        'user_nicename' => sanitize_title($login),
        'user_email' => $email ?: $login . '@melk.test',
        'user_registered' => $now, 'display_name' => $name,
        'user_status' => 0,
    ]);
    $log['users'][] = ['login' => $login, 'id' => $id, 'action' => 'created', 'password' => $pass];
    return $id;
}

function mcs_assign_role( int $user_id, string $role_slug ): void {
    global $wpdb;
    $role_id = mcs_role_id($role_slug);
    if ( ! $role_id || ! $user_id ) return;
    $exists = (int) $wpdb->get_var($wpdb->prepare(
        "SELECT COUNT(*) FROM {$wpdb->prefix}acl_user_roles WHERE user_id=%d AND role_id=%d",
        $user_id, $role_id
    ));
    if ( $exists ) return;
    $wpdb->insert("{$wpdb->prefix}acl_user_roles", [
        'user_id' => $user_id, 'role_id' => $role_id,
        'scope_type' => 'global', 'scope_id' => null, 'granted_by' => 2,
    ]);
}

function mcs_user_name( int $uid ): string {
    global $wpdb;
    return (string) $wpdb->get_var($wpdb->prepare(
        "SELECT display_name FROM {$wpdb->users} WHERE ID=%d", $uid
    ));
}

// ── کاربران تست ──
$users = [
    'county'  => ['login' => 'melk_county_agency',       'name' => 'بنگاه املاک مرودشت',     'role' => 'melk_county_agency'],
    'arch'    => ['login' => 'melk_specialist_arch',      'name' => 'معمار — علی رضایی',       'role' => 'melk_building_specialist'],
    'struct'  => ['login' => 'melk_specialist_struct',    'name' => 'کارشناس سازه — مریم احمدی', 'role' => 'melk_building_specialist'],
    'mep'     => ['login' => 'melk_specialist_mep',       'name' => 'کارشناس تاسیسات — حسین کریمی', 'role' => 'melk_building_specialist'],
    'pending' => ['login' => 'melk_specialist_pending',   'name' => 'ناظر — رضا موسوی (در انتظار)', 'role' => 'melk_building_specialist'],
];

$uids = [];
foreach ( $users as $key => $u ) {
    $uid = mcs_ensure_user($u['login'], $u['name']);
    mcs_assign_role($uid, $u['role']);
    mcs_assign_role($uid, 'melk_specialist'); // melk.view برای همه
    $uids[$key] = $uid;
}

// ostadowner — دسترسی تأیید
$admin = (int) $wpdb->get_var("SELECT ID FROM {$wpdb->users} WHERE user_login='ostadowner' LIMIT 1");
if ( $admin ) {
    mcs_assign_role($admin, 'melk_coordinator');
}

// ── درخواست‌های بنگاه شهرستان ──
$county_requests = [
    [
        'request_key' => 'CR-DEMO-01', 'request_type' => 'property_buy',
        'form_template_key' => 'county_property_buy',
        'title' => 'خرید زمین مسکونی ۵۰۰ متری', 'status' => 'submitted',
        'priority' => 'high', 'county' => 'مرودشت', 'city' => 'مرودشت',
        'agency_name' => 'بنگاه املاک مرودشت',
        'description' => 'مشتری به دنبال زمین مسکونی در محدوده شهر مرودشت با سند تک‌برگ.',
        'contact_phone' => '09171234567', 'created_by' => $uids['county'],
        'form_data' => wp_json_encode([
            'property_type' => 'residential_land', 'land_area_sqm' => 500,
            'land_use' => 'residential', 'document_type' => 'single_deed',
            'budget_max' => 15000000000, 'client_name' => 'احمد رضایی',
            'sla_days' => 14, 'report_tags' => 'فصلی',
        ], JSON_UNESCAPED_UNICODE),
    ],
    [
        'request_key' => 'CR-DEMO-02', 'request_type' => 'problem',
        'form_template_key' => 'county_problem',
        'title' => 'مشکل در استعلام ثبت — ملک روستایی', 'status' => 'under_review',
        'priority' => 'urgent', 'county' => 'کازرون', 'city' => 'کازرون',
        'agency_name' => 'بنگاه املاک مرودشت',
        'description' => 'سند ملک روستایی در سامانه ثبت با کد نوسازی مطابقت ندارد.',
        'contact_phone' => '09171234568', 'created_by' => $uids['county'],
        'form_data' => wp_json_encode([
            'problem_category' => 'registry', 'affected_process' => 'sale',
            'blocking' => 'yes', 'steps_taken' => 'مراجعه به اداره ثبت — در انتظار پاسخ',
            'sla_days' => 7, 'deadline_date' => '۱۴۰۴/۰۷/۰۱',
        ], JSON_UNESCAPED_UNICODE),
    ],
    [
        'request_key' => 'CR-DEMO-03', 'request_type' => 'demand',
        'form_template_key' => 'county_demand',
        'title' => 'تقاضای آپارتمان ۱۰۰ متری', 'status' => 'in_progress',
        'priority' => 'normal', 'county' => 'مرودشت', 'city' => 'مصیری',
        'agency_name' => 'بنگاه املاک مرودشت',
        'description' => 'خانواده به دنبال آپارتمان نوساز ۲ خوابه در مصیری.',
        'contact_phone' => '09171234569', 'created_by' => $uids['county'],
        'form_data' => wp_json_encode([
            'property_type_wanted' => 'apartment', 'area_min_sqm' => 90, 'area_max_sqm' => 120,
            'rooms_min' => 2, 'budget_max' => 8000000000, 'deal_type_wanted' => 'buy',
            'client_name' => 'خانواده محمدی',
        ], JSON_UNESCAPED_UNICODE),
    ],
    [
        'request_key' => 'CR-DEMO-04', 'request_type' => 'legal_issue',
        'form_template_key' => 'county_legal_issue',
        'title' => 'بررسی رهن و فک رهن', 'status' => 'resolved',
        'priority' => 'normal', 'county' => 'مرودشت', 'city' => 'مرودشت',
        'agency_name' => 'بنگاه املاک مرودشت',
        'description' => 'نیاز به مشاوره حقوقی برای فک رهن ملک تجاری.',
        'contact_phone' => '09171234570', 'created_by' => $uids['county'],
        'form_data' => wp_json_encode([
            'legal_case_type' => 'mortgage_release', 'property_ref' => '۱-۲۳۴-۵۶۷۸',
            'documents_attached' => ['deed', 'contract'],
            'report_tags' => 'حقوقی',
        ], JSON_UNESCAPED_UNICODE),
        'resolved_at' => date('Y-m-d H:i:s'),
    ],
];

function mcs_upsert_county_request( array $cr ): void {
    global $wpdb, $log, $pre;
    $key = $cr['request_key'];
    $existing = (int) $wpdb->get_var($wpdb->prepare(
        "SELECT id FROM {$pre}melk_county_requests WHERE request_key=%s", $key
    ));
    if ( ! isset( $cr['created_by_name'] ) && isset( $cr['created_by'] ) ) {
        $cr['created_by_name'] = mcs_user_name( (int) $cr['created_by'] );
    }
    if ( $existing ) {
        $wpdb->update("{$pre}melk_county_requests", $cr, ['id' => $existing]);
        $log['county_requests'][] = ['key' => $key, 'action' => 'updated'];
    } else {
        $wpdb->insert("{$pre}melk_county_requests", $cr);
        $log['county_requests'][] = ['key' => $key, 'action' => 'created'];
    }
}

foreach ( $county_requests as $cr ) {
    mcs_upsert_county_request($cr);
}

// ── متخصصان ساختمان ──
$specialists = [
    [
        'user_id' => $uids['arch'], 'specialty' => 'architect', 'status' => 'approved',
        'form_template_key' => 'specialist_architect',
        'license_no' => 'ARCH-1402-4521', 'years_experience' => 12,
        'county' => 'شیراز', 'city' => 'شیراز',
        'contact_phone' => '09171111111', 'contact_email' => 'arch@melk.test',
        'bio' => 'طراحی معماری مسکونی و تجاری — ۱۲ سال سابقه در فارس.',
        'credentials' => 'عضو نظام مهندسی — پروانه طراحی معماری',
        'service_areas' => wp_json_encode(['شیراز', 'مرودشت', 'کازرون']),
        'form_data' => wp_json_encode([
            'education_degree' => 'master', 'engineering_org_id' => 'NE-4521',
            'design_software' => ['autocad', 'revit', 'sketchup'],
            'project_types' => ['residential', 'commercial', 'renovation'],
            'max_project_area_sqm' => 2500,
        ], JSON_UNESCAPED_UNICODE),
        'approved_by' => $admin ?: 2, 'approved_at' => date('Y-m-d H:i:s'),
    ],
    [
        'user_id' => $uids['struct'], 'specialty' => 'structural', 'status' => 'approved',
        'form_template_key' => 'specialist_structural',
        'license_no' => 'STR-1401-8834', 'years_experience' => 8,
        'county' => 'شیراز', 'city' => 'شیراز',
        'contact_phone' => '09172222222', 'contact_email' => 'struct@melk.test',
        'bio' => 'طراحی سازه بتنی و فولادی — پروژه‌های مسکونی و صنعتی.',
        'credentials' => 'کارشناس رسمی سازه — نظام مهندسی',
        'service_areas' => wp_json_encode(['شیراز', 'مرودشت']),
        'form_data' => wp_json_encode([
            'structure_systems' => ['concrete', 'steel'],
            'analysis_software' => ['etabs', 'safe'],
            'seismic_design' => 'experienced', 'peer_review' => 'yes', 'max_floors' => 14,
        ], JSON_UNESCAPED_UNICODE),
        'approved_by' => $admin ?: 2, 'approved_at' => date('Y-m-d H:i:s'),
    ],
    [
        'user_id' => $uids['mep'], 'specialty' => 'mep', 'status' => 'approved',
        'form_template_key' => 'specialist_mep',
        'license_no' => 'MEP-1403-1209', 'years_experience' => 6,
        'county' => 'مرودشت', 'city' => 'مرودشت',
        'contact_phone' => '09173333333', 'contact_email' => 'mep@melk.test',
        'bio' => 'طراحی تاسیسات مکانیکی و برقی — HVAC، آتش‌نشانی، لوله‌کشی.',
        'credentials' => 'پروانه طراحی تاسیسات — نظام مهندسی',
        'service_areas' => wp_json_encode(['مرودشت', 'کازرون', 'مصیری']),
        'form_data' => wp_json_encode([
            'mep_disciplines' => ['hvac', 'electrical', 'plumbing', 'fire'],
            'energy_audit' => 'yes', 'green_building' => 'iran_green', 'max_capacity_kw' => 500,
        ], JSON_UNESCAPED_UNICODE),
        'approved_by' => $admin ?: 2, 'approved_at' => date('Y-m-d H:i:s'),
    ],
    [
        'user_id' => $uids['pending'], 'specialty' => 'supervisor', 'status' => 'pending_approval',
        'form_template_key' => 'specialist_supervisor',
        'license_no' => 'SUP-1404-0055', 'years_experience' => 10,
        'county' => 'کازرون', 'city' => 'کازرون',
        'contact_phone' => '09174444444', 'contact_email' => 'supervisor@melk.test',
        'bio' => 'ناظر ساختمان — ۱۰ سال سابقه نظارت پروژه‌های مسکونی.',
        'credentials' => 'گواهی ناظر ساختمان — نظام مهندسی',
        'service_areas' => wp_json_encode(['کازرون', 'فیروزآباد']),
        'form_data' => wp_json_encode([
            'supervisor_grade' => '2', 'max_floors_supervised' => 10,
            'construction_phases' => ['foundation', 'structure', 'finishing'],
            'project_scale' => 'medium',
        ], JSON_UNESCAPED_UNICODE),
    ],
];

function mcs_upsert_specialist( array $sp ): void {
    global $wpdb, $log, $pre;
    $uid = (int) $sp['user_id'];
    $existing = (int) $wpdb->get_var($wpdb->prepare(
        "SELECT id FROM {$pre}melk_building_specialists WHERE user_id=%d", $uid
    ));
    if ( $existing ) {
        $wpdb->update("{$pre}melk_building_specialists", $sp, ['id' => $existing]);
        $log['specialists'][] = ['user_id' => $uid, 'action' => 'updated', 'form' => $sp['form_template_key'] ?? null];
    } else {
        $wpdb->insert("{$pre}melk_building_specialists", $sp);
        $log['specialists'][] = ['user_id' => $uid, 'action' => 'created', 'form' => $sp['form_template_key'] ?? null];
    }
}

foreach ( $specialists as $sp ) {
    mcs_upsert_specialist($sp);
}

// ── اصلاح مجوز نقش متخصص: bid بله، view خیر ──
$bs_role = mcs_role_id('melk_building_specialist');
if ( $bs_role ) {
    $wpdb->query($wpdb->prepare(
        "DELETE FROM {$wpdb->prefix}acl_role_permissions WHERE role_id=%d AND permission_key='melk.specialists.view'",
        $bs_role
    ));
    $wpdb->query($wpdb->prepare(
        "INSERT IGNORE INTO {$wpdb->prefix}acl_role_permissions (role_id, permission_key) VALUES (%d, 'melk.specialists.bid')",
        $bs_role
    ));
    $log['acl_fix'] = 'melk_building_specialist: bid added, view removed';
}

// ── مناقصه‌های نمونه ──
$tenders = [
    [
        'tender_key' => 'TN-DEMO-01', 'title' => 'طراحی معماری ویلا ۳۰۰ متری',
        'description' => 'طراحی معماری کامل شامل پلان، نما و جزئیات — مرودشت',
        'specialty_required' => 'architect', 'project_type' => 'design',
        'location_county' => 'مرودشت', 'location_city' => 'مرودشت',
        'budget_min' => 80000000, 'budget_max' => 120000000,
        'deadline' => date('Y-m-d H:i:s', strtotime('+30 days')),
        'status' => 'open', 'created_by' => $admin ?: 2,
        'created_by_name' => 'بنگاه املاک مرودشت',
    ],
    [
        'tender_key' => 'TN-DEMO-02', 'title' => 'نظارت ساخت آپارتمان ۵ طبقه',
        'description' => 'ناظر مقیم پروژه مسکونی — کازرون',
        'specialty_required' => 'supervisor', 'project_type' => 'supervision',
        'location_county' => 'کازرون', 'location_city' => 'کازرون',
        'budget_min' => 50000000, 'budget_max' => 90000000,
        'deadline' => date('Y-m-d H:i:s', strtotime('+45 days')),
        'status' => 'open', 'created_by' => $admin ?: 2,
        'created_by_name' => 'مدیر سیستم',
    ],
    [
        'tender_key' => 'TN-DEMO-03', 'title' => 'طراحی تاسیسات مکانیکی ساختمان تجاری',
        'description' => 'HVAC، آتش‌نشانی، لوله‌کشی — شیراز',
        'specialty_required' => 'mep', 'project_type' => 'design',
        'location_county' => 'شیراز', 'location_city' => 'شیراز',
        'budget_min' => 60000000, 'budget_max' => 100000000,
        'deadline' => date('Y-m-d H:i:s', strtotime('+20 days')),
        'status' => 'open', 'created_by' => $admin ?: 2,
        'created_by_name' => 'هماهنگ‌کننده',
    ],
];
foreach ( $tenders as $tn ) {
    $exists = (int) $wpdb->get_var($wpdb->prepare(
        "SELECT id FROM {$pre}melk_specialist_tenders WHERE tender_key=%s", $tn['tender_key']
    ));
    if ( $exists ) continue;
    $wpdb->insert("{$pre}melk_specialist_tenders", $tn);
    $log['tenders'][] = $tn['tender_key'];
}

$log['scenarios'] = [
    ['login' => 'melk_county_agency', 'tab' => 'county', 'desc' => 'ثبت و پیگیری درخواست‌های بنگاه شهرستان'],
    ['login' => 'melk_specialist_arch', 'tab' => 'specialists', 'desc' => 'معمار — فقط مناقصه‌ها و پیشنهاد قیمت (نه فهرست دیگران)'],
    ['login' => 'melk_specialist_pending', 'tab' => 'specialists', 'desc' => 'متخصص در انتظار تأیید — مدیر در صف تأیید'],
    ['login' => 'ostadowner', 'tab' => 'county|specialists', 'desc' => 'مدیر — مدیریت درخواست‌ها و تأیید متخصصان'],
];

echo json_encode([
    'ok' => true,
    'message' => 'داده تست بنگاه شهرستان و متخصصان ایجاد شد',
    'password' => $pass,
    'log' => $log,
], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
