<?php
/**
 * melk-county-forms.php — بانک فرم‌های استاندارد بنگاه شهرستان (CRM / گزارش‌گیری)
 */
if ( ! defined( 'ABSPATH' ) ) exit;

class Melk_County_Forms {

    private static function base_fields(): array {
        return [
            [ 'key' => 'title', 'label' => 'عنوان درخواست *', 'type' => 'text', 'required' => true, 'maps_to' => 'title', 'section' => 'base' ],
            [ 'key' => 'priority', 'label' => 'اولویت *', 'type' => 'select', 'required' => true, 'maps_to' => 'priority', 'section' => 'base',
              'options' => [ 'low' => 'کم', 'normal' => 'معمولی', 'high' => 'بالا', 'urgent' => 'فوری' ] ],
            [ 'key' => 'description', 'label' => 'شرح درخواست', 'type' => 'textarea', 'maps_to' => 'description', 'rows' => 3, 'section' => 'base' ],
        ];
    }

    private static function location_fields(): array {
        return [
            [ 'key' => 'county', 'label' => 'شهرستان *', 'type' => 'text', 'required' => true, 'maps_to' => 'county', 'section' => 'location' ],
            [ 'key' => 'city', 'label' => 'شهر / روستا', 'type' => 'text', 'maps_to' => 'city', 'section' => 'location' ],
            [ 'key' => 'agency_name', 'label' => 'نام بنگاه', 'type' => 'text', 'maps_to' => 'agency_name', 'section' => 'location' ],
        ];
    }

    private static function contact_fields(): array {
        return [
            [ 'key' => 'contact_phone', 'label' => 'تلفن تماس *', 'type' => 'tel', 'required' => true, 'maps_to' => 'contact_phone', 'dir' => 'ltr', 'section' => 'contact' ],
            [ 'key' => 'contact_email', 'label' => 'ایمیل', 'type' => 'text', 'maps_to' => 'contact_email', 'dir' => 'ltr', 'section' => 'contact' ],
            [ 'key' => 'client_name', 'label' => 'نام مشتری', 'type' => 'text', 'section' => 'contact' ],
            [ 'key' => 'client_ref', 'label' => 'کد پیگیری مشتری', 'type' => 'text', 'dir' => 'ltr', 'section' => 'contact' ],
        ];
    }

    private static function reporting_fields(): array {
        return [
            [ 'key' => 'deadline_date', 'label' => 'مهلت رسیدگی', 'type' => 'text', 'placeholder' => '۱۴۰۴/۰۶/۳۰', 'section' => 'report' ],
            [ 'key' => 'sla_days', 'label' => 'SLA (روز)', 'type' => 'number', 'min' => 1, 'section' => 'report' ],
            [ 'key' => 'report_tags', 'label' => 'برچسب گزارش', 'type' => 'text', 'placeholder' => 'فصلی، VIP، ...', 'section' => 'report' ],
        ];
    }

    public static function catalog(): array {
        return [
            [
                'form_key' => 'county_demand', 'title' => 'فرم تقاضای ملک', 'subtitle' => 'CRM · Demand Request',
                'icon' => '📋', 'request_type' => 'demand', 'standard' => 'RESO BuyerDemand',
                'min_fields' => [ 'title', 'county', 'contact_phone', 'property_type_wanted', 'budget_max' ],
                'sections' => [
                    [ 'key' => 'base', 'title' => '📋 اطلاعات پایه', 'fields' => self::base_fields() ],
                    [ 'key' => 'demand', 'title' => '🏠 مشخصات تقاضا', 'fields' => [
                        [ 'key' => 'property_type_wanted', 'label' => 'نوع ملک مطلوب *', 'type' => 'select', 'required' => true,
                          'options' => [ 'apartment' => 'آپارتمان', 'villa' => 'ویلا', 'land' => 'زمین', 'commercial' => 'تجاری', 'any' => 'فرقی ندارد' ] ],
                        [ 'key' => 'area_min_sqm', 'label' => 'حداقل متراژ (m²)', 'type' => 'number' ],
                        [ 'key' => 'area_max_sqm', 'label' => 'حداکثر متراژ (m²)', 'type' => 'number' ],
                        [ 'key' => 'rooms_min', 'label' => 'حداقل خواب', 'type' => 'number', 'min' => 0 ],
                        [ 'key' => 'budget_min', 'label' => 'بودجه از (تومان)', 'type' => 'number', 'dir' => 'ltr' ],
                        [ 'key' => 'budget_max', 'label' => 'بودجه تا (تومان) *', 'type' => 'number', 'required' => true, 'dir' => 'ltr' ],
                        [ 'key' => 'deal_type_wanted', 'label' => 'نوع معامله', 'type' => 'select',
                          'options' => [ 'buy' => 'خرید', 'rent' => 'اجاره', 'mortgage' => 'رهن و اجاره' ] ],
                    ] ],
                    [ 'key' => 'location', 'title' => '📍 موقعیت', 'fields' => self::location_fields() ],
                    [ 'key' => 'contact', 'title' => '👤 تماس', 'fields' => self::contact_fields() ],
                    [ 'key' => 'report', 'title' => '📊 گزارش‌گیری', 'fields' => self::reporting_fields() ],
                ],
            ],
            [
                'form_key' => 'county_property_buy', 'title' => 'فرم خرید ملک', 'subtitle' => 'Purchase Request · ISO',
                'icon' => '🏡', 'request_type' => 'property_buy', 'standard' => 'RESO Purchase',
                'min_fields' => [ 'title', 'county', 'contact_phone', 'property_type', 'budget_max' ],
                'sections' => [
                    [ 'key' => 'base', 'title' => '📋 اطلاعات پایه', 'fields' => self::base_fields() ],
                    [ 'key' => 'property', 'title' => '🏡 ملک مورد نظر', 'fields' => [
                        [ 'key' => 'property_type', 'label' => 'نوع ملک *', 'type' => 'select', 'required' => true,
                          'options' => [ 'residential_land' => 'زمین مسکونی', 'apartment' => 'آپارتمان', 'villa' => 'ویلا', 'commercial' => 'تجاری' ] ],
                        [ 'key' => 'land_area_sqm', 'label' => 'مساحت زمین (m²)', 'type' => 'number' ],
                        [ 'key' => 'building_area_sqm', 'label' => 'متراژ بنا (m²)', 'type' => 'number' ],
                        [ 'key' => 'land_use', 'label' => 'کاربری', 'type' => 'select',
                          'options' => [ 'residential' => 'مسکونی', 'commercial' => 'تجاری', 'agricultural' => 'کشاورزی', 'mixed' => 'مختلط' ] ],
                        [ 'key' => 'document_type', 'label' => 'نوع سند', 'type' => 'select',
                          'options' => [ 'single_deed' => 'تک‌برگ', 'condominium' => 'تفکیکی', 'any' => 'مهم نیست' ] ],
                        [ 'key' => 'budget_max', 'label' => 'حداکثر بودجه (تومان) *', 'type' => 'number', 'required' => true, 'dir' => 'ltr' ],
                        [ 'key' => 'renovation_code', 'label' => 'کد نوسازی (در صورت وجود)', 'type' => 'text', 'dir' => 'ltr' ],
                    ] ],
                    [ 'key' => 'location', 'title' => '📍 موقعیت', 'fields' => self::location_fields() ],
                    [ 'key' => 'contact', 'title' => '👤 تماس', 'fields' => self::contact_fields() ],
                    [ 'key' => 'report', 'title' => '📊 گزارش‌گیری', 'fields' => self::reporting_fields() ],
                ],
            ],
            [
                'form_key' => 'county_property_search', 'title' => 'فرم جستجوی ملک', 'subtitle' => 'Property Search',
                'icon' => '🔍', 'request_type' => 'property_search', 'standard' => 'CRM Search',
                'min_fields' => [ 'title', 'county', 'contact_phone', 'search_criteria' ],
                'sections' => [
                    [ 'key' => 'base', 'title' => '📋 اطلاعات پایه', 'fields' => self::base_fields() ],
                    [ 'key' => 'search', 'title' => '🔍 معیارهای جستجو', 'fields' => [
                        [ 'key' => 'search_criteria', 'label' => 'شرح معیارها *', 'type' => 'textarea', 'required' => true, 'rows' => 2 ],
                        [ 'key' => 'property_type', 'label' => 'نوع ملک', 'type' => 'select',
                          'options' => [ 'apartment' => 'آپارتمان', 'villa' => 'ویلا', 'land' => 'زمین', 'commercial' => 'تجاری' ] ],
                        [ 'key' => 'area_range', 'label' => 'بازه متراژ', 'type' => 'text', 'placeholder' => '۸۰-۱۲۰ m²' ],
                        [ 'key' => 'price_range', 'label' => 'بازه قیمت', 'type' => 'text', 'dir' => 'ltr' ],
                        [ 'key' => 'must_have', 'label' => 'الزامات', 'type' => 'multiselect',
                          'options' => [ 'parking' => 'پارکینگ', 'elevator' => 'آسانسور', 'deed' => 'سند تک‌برگ', 'new' => 'نوساز' ] ],
                    ] ],
                    [ 'key' => 'location', 'title' => '📍 موقعیت', 'fields' => self::location_fields() ],
                    [ 'key' => 'contact', 'title' => '👤 تماس', 'fields' => self::contact_fields() ],
                    [ 'key' => 'report', 'title' => '📊 گزارش‌گیری', 'fields' => self::reporting_fields() ],
                ],
            ],
            [
                'form_key' => 'county_partnership', 'title' => 'فرم مشارکت در ساخت', 'subtitle' => 'Joint Venture',
                'icon' => '🤝', 'request_type' => 'partnership', 'standard' => 'JV Request',
                'min_fields' => [ 'title', 'county', 'contact_phone', 'land_area_sqm', 'land_use' ],
                'sections' => [
                    [ 'key' => 'base', 'title' => '📋 اطلاعات پایه', 'fields' => self::base_fields() ],
                    [ 'key' => 'jv', 'title' => '🤝 شرایط مشارکت', 'fields' => [
                        [ 'key' => 'land_area_sqm', 'label' => 'مساحت زمین (m²) *', 'type' => 'number', 'required' => true ],
                        [ 'key' => 'land_use', 'label' => 'کاربری *', 'type' => 'select', 'required' => true,
                          'options' => [ 'residential' => 'مسکونی', 'commercial' => 'تجاری', 'mixed' => 'مختلط' ] ],
                        [ 'key' => 'owner_share_pct', 'label' => 'سهم مالک (%)', 'type' => 'number', 'min' => 0, 'max' => 100 ],
                        [ 'key' => 'estimated_value', 'label' => 'ارزش تقریبی زمین', 'type' => 'number', 'dir' => 'ltr' ],
                        [ 'key' => 'license_status', 'label' => 'وضعیت پروانه', 'type' => 'select',
                          'options' => [ 'has' => 'دارد', 'pending' => 'در دست اقدام', 'none' => 'ندارد' ] ],
                    ] ],
                    [ 'key' => 'location', 'title' => '📍 موقعیت', 'fields' => self::location_fields() ],
                    [ 'key' => 'contact', 'title' => '👤 تماس', 'fields' => self::contact_fields() ],
                    [ 'key' => 'report', 'title' => '📊 گزارش‌گیری', 'fields' => self::reporting_fields() ],
                ],
            ],
            [
                'form_key' => 'county_legal_issue', 'title' => 'فرم مسئله حقوقی', 'subtitle' => 'Legal Case · CRM',
                'icon' => '⚖️', 'request_type' => 'legal_issue', 'standard' => 'Legal Workflow',
                'min_fields' => [ 'title', 'county', 'contact_phone', 'legal_case_type' ],
                'sections' => [
                    [ 'key' => 'base', 'title' => '📋 اطلاعات پایه', 'fields' => self::base_fields() ],
                    [ 'key' => 'legal', 'title' => '⚖️ پرونده حقوقی', 'fields' => [
                        [ 'key' => 'legal_case_type', 'label' => 'نوع پرونده *', 'type' => 'select', 'required' => true,
                          'options' => [ 'mortgage_release' => 'فک رهن', 'inheritance' => 'ارث', 'dispute' => 'اختلاف مالکیت',
                                         'registration' => 'ثبت/استعلام', 'contract_review' => 'بررسی قرارداد', 'other' => 'سایر' ] ],
                        [ 'key' => 'property_ref', 'label' => 'کد نوسازی / پلاک', 'type' => 'text', 'dir' => 'ltr' ],
                        [ 'key' => 'court_case_no', 'label' => 'شماره پرونده دادگاه', 'type' => 'text', 'dir' => 'ltr' ],
                        [ 'key' => 'urgency_reason', 'label' => 'دلیل فوریت', 'type' => 'textarea', 'rows' => 2 ],
                        [ 'key' => 'documents_attached', 'label' => 'مدارک پیوست', 'type' => 'multiselect',
                          'options' => [ 'deed' => 'سند', 'contract' => 'قرارداد', 'renovation' => 'کد نوسازی', 'id' => 'شناسنامه/کارت ملی' ] ],
                    ] ],
                    [ 'key' => 'location', 'title' => '📍 موقعیت', 'fields' => self::location_fields() ],
                    [ 'key' => 'contact', 'title' => '👤 تماس', 'fields' => self::contact_fields() ],
                    [ 'key' => 'report', 'title' => '📊 گزارش‌گیری', 'fields' => self::reporting_fields() ],
                ],
            ],
            [
                'form_key' => 'county_valuation', 'title' => 'فرم کارشناسی قیمت', 'subtitle' => 'Appraisal Request',
                'icon' => '📊', 'request_type' => 'valuation', 'standard' => 'RICS / کارشناسی رسمی',
                'min_fields' => [ 'title', 'county', 'contact_phone', 'property_type', 'area_sqm' ],
                'sections' => [
                    [ 'key' => 'base', 'title' => '📋 اطلاعات پایه', 'fields' => self::base_fields() ],
                    [ 'key' => 'valuation', 'title' => '📊 کارشناسی', 'fields' => [
                        [ 'key' => 'property_type', 'label' => 'نوع ملک *', 'type' => 'select', 'required' => true,
                          'options' => [ 'apartment' => 'آپارتمان', 'villa' => 'ویلا', 'land' => 'زمین', 'commercial' => 'تجاری' ] ],
                        [ 'key' => 'area_sqm', 'label' => 'متراژ (m²) *', 'type' => 'number', 'required' => true ],
                        [ 'key' => 'valuation_purpose', 'label' => 'هدف کارشناسی *', 'type' => 'select', 'required' => true,
                          'options' => [ 'sale' => 'فروش', 'mortgage' => 'وام/رهن', 'inheritance' => 'ارث', 'tax' => 'مالیات', 'dispute' => 'اختلاف' ] ],
                        [ 'key' => 'property_address', 'label' => 'آدرس ملک', 'type' => 'text' ],
                        [ 'key' => 'renovation_code', 'label' => 'کد نوسازی', 'type' => 'text', 'dir' => 'ltr' ],
                    ] ],
                    [ 'key' => 'location', 'title' => '📍 موقعیت', 'fields' => self::location_fields() ],
                    [ 'key' => 'contact', 'title' => '👤 تماس', 'fields' => self::contact_fields() ],
                    [ 'key' => 'report', 'title' => '📊 گزارش‌گیری', 'fields' => self::reporting_fields() ],
                ],
            ],
            [
                'form_key' => 'county_problem', 'title' => 'فرم گزارش مشکل/چالش', 'subtitle' => 'Issue Tracking',
                'icon' => '🚨', 'request_type' => 'problem', 'standard' => 'ITIL / CRM Ticket',
                'min_fields' => [ 'title', 'county', 'contact_phone', 'problem_category' ],
                'sections' => [
                    [ 'key' => 'base', 'title' => '📋 اطلاعات پایه', 'fields' => self::base_fields() ],
                    [ 'key' => 'problem', 'title' => '🚨 جزئیات مشکل', 'fields' => [
                        [ 'key' => 'problem_category', 'label' => 'دسته مشکل *', 'type' => 'select', 'required' => true,
                          'options' => [ 'registry' => 'ثبت/استعلام', 'municipality' => 'شهرداری', 'tax' => 'مالیات',
                                         'bank' => 'بانک/وام', 'system' => 'سامانه/فنی', 'other' => 'سایر' ] ],
                        [ 'key' => 'affected_process', 'label' => 'فرآیند متأثر', 'type' => 'select',
                          'options' => [ 'sale' => 'فروش', 'rent' => 'اجاره', 'partnership' => 'مشارکت', 'legal' => 'حقوقی' ] ],
                        [ 'key' => 'blocking', 'label' => 'مانع معامله؟', 'type' => 'select',
                          'options' => [ 'yes' => 'بله', 'no' => 'خیر', 'partial' => 'جزئی' ] ],
                        [ 'key' => 'steps_taken', 'label' => 'اقدامات انجام‌شده', 'type' => 'textarea', 'rows' => 2 ],
                    ] ],
                    [ 'key' => 'location', 'title' => '📍 موقعیت', 'fields' => self::location_fields() ],
                    [ 'key' => 'contact', 'title' => '👤 تماس', 'fields' => self::contact_fields() ],
                    [ 'key' => 'report', 'title' => '📊 گزارش‌گیری', 'fields' => self::reporting_fields() ],
                ],
            ],
            [
                'form_key' => 'county_other', 'title' => 'فرم درخواست عمومی', 'subtitle' => 'General Request',
                'icon' => '📝', 'request_type' => 'other', 'standard' => 'CRM General',
                'min_fields' => [ 'title', 'county', 'contact_phone', 'request_summary' ],
                'sections' => [
                    [ 'key' => 'base', 'title' => '📋 اطلاعات پایه', 'fields' => self::base_fields() ],
                    [ 'key' => 'general', 'title' => '📝 جزئیات', 'fields' => [
                        [ 'key' => 'request_summary', 'label' => 'خلاصه درخواست *', 'type' => 'textarea', 'required' => true, 'rows' => 3 ],
                        [ 'key' => 'expected_outcome', 'label' => 'نتیجه مورد انتظار', 'type' => 'text' ],
                    ] ],
                    [ 'key' => 'location', 'title' => '📍 موقعیت', 'fields' => self::location_fields() ],
                    [ 'key' => 'contact', 'title' => '👤 تماس', 'fields' => self::contact_fields() ],
                    [ 'key' => 'report', 'title' => '📊 گزارش‌گیری', 'fields' => self::reporting_fields() ],
                ],
            ],
        ];
    }

    public static function bank_list( ?string $request_type = null ): array {
        $items = array_map( fn( $f ) => [
            'form_key' => $f['form_key'], 'title' => $f['title'], 'subtitle' => $f['subtitle'] ?? '',
            'icon' => $f['icon'] ?? '📋', 'request_type' => $f['request_type'],
            'standard' => $f['standard'] ?? '', 'min_fields' => $f['min_fields'] ?? [],
            'section_count' => count( $f['sections'] ?? [] ),
        ], self::catalog() );
        if ( $request_type ) {
            $items = array_values( array_filter( $items, fn( $i ) => $i['request_type'] === $request_type ) );
        }
        return $items;
    }

    public static function form_config( string $form_key ): ?array {
        foreach ( self::catalog() as $f ) {
            if ( $f['form_key'] === $form_key ) return $f;
        }
        return null;
    }

    public static function form_by_request_type( string $request_type ): ?array {
        foreach ( self::catalog() as $f ) {
            if ( $f['request_type'] === $request_type ) return $f;
        }
        return null;
    }

    public static function map_submission( string $form_key, array $values ): array {
        $cfg = self::form_config( $form_key );
        if ( ! $cfg ) return [ 'columns' => [], 'form_data' => $values, 'errors' => [ 'فرم نامعتبر' ] ];

        $all_fields = [];
        foreach ( $cfg['sections'] as $sec ) {
            foreach ( $sec['fields'] as $field ) {
                $all_fields[ $field['key'] ] = $field;
            }
        }

        $columns = [ 'request_type' => $cfg['request_type'], 'form_template_key' => $form_key ];
        $form_data = [];
        $errors = [];

        foreach ( $values as $key => $val ) {
            if ( ! isset( $all_fields[ $key ] ) ) {
                $form_data[ $key ] = $val;
                continue;
            }
            $field = $all_fields[ $key ];
            if ( ! empty( $field['required'] ) && ( $val === '' || $val === null || ( is_array( $val ) && ! $val ) ) ) {
                $errors[] = $field['label'] . ' الزامی است';
                continue;
            }
            $target = $field['maps_to'] ?? null;
            if ( $target ) {
                $columns[ $target ] = $val;
            } else {
                $form_data[ $key ] = $val;
            }
        }

        foreach ( $all_fields as $key => $field ) {
            if ( ! empty( $field['required'] ) && ! isset( $values[ $key ] ) ) {
                $errors[] = $field['label'] . ' الزامی است';
            }
        }

        return [ 'columns' => $columns, 'form_data' => $form_data, 'errors' => $errors ];
    }

    public static function seed_to_db(): array {
        global $wpdb;
        $pre = $wpdb->prefix;
        $done = [];
        foreach ( self::catalog() as $i => $f ) {
            $exists = (int) $wpdb->get_var( $wpdb->prepare(
                "SELECT id FROM {$pre}melk_county_form_templates WHERE form_key = %s", $f['form_key']
            ) );
            $row = [
                'form_key' => $f['form_key'], 'title' => $f['title'], 'subtitle' => $f['subtitle'] ?? '',
                'icon' => $f['icon'] ?? '📋', 'request_type' => $f['request_type'],
                'standard_ref' => $f['standard'] ?? '',
                'sections_json' => wp_json_encode( $f['sections'], JSON_UNESCAPED_UNICODE ),
                'min_fields' => wp_json_encode( $f['min_fields'] ?? [], JSON_UNESCAPED_UNICODE ),
                'sort_order' => $i + 1, 'is_active' => 1,
            ];
            if ( $exists ) {
                $wpdb->update( "{$pre}melk_county_form_templates", $row, [ 'id' => $exists ] );
                $done[] = "updated:{$f['form_key']}";
            } else {
                $wpdb->insert( "{$pre}melk_county_form_templates", $row );
                $done[] = "created:{$f['form_key']}";
            }
        }
        return $done;
    }

    public static function bank_from_db( ?string $request_type = null ): array {
        global $wpdb;
        $pre = $wpdb->prefix;
        $rows = $wpdb->get_results(
            "SELECT * FROM {$pre}melk_county_form_templates WHERE is_active = 1 ORDER BY sort_order ASC", ARRAY_A
        );
        if ( ! $rows ) return self::bank_list( $request_type );
        $items = array_map( fn( $r ) => [
            'form_key' => $r['form_key'], 'title' => $r['title'], 'subtitle' => $r['subtitle'],
            'icon' => $r['icon'], 'request_type' => $r['request_type'], 'standard' => $r['standard_ref'],
            'min_fields' => json_decode( $r['min_fields'] ?? '[]', true ) ?: [],
            'section_count' => count( json_decode( $r['sections_json'] ?? '[]', true ) ?: [] ),
        ], $rows );
        if ( $request_type ) {
            $items = array_values( array_filter( $items, fn( $i ) => $i['request_type'] === $request_type ) );
        }
        return $items;
    }

    public static function config_from_db( string $form_key ): ?array {
        global $wpdb;
        $pre = $wpdb->prefix;
        $r = $wpdb->get_row( $wpdb->prepare(
            "SELECT * FROM {$pre}melk_county_form_templates WHERE form_key = %s AND is_active = 1", $form_key
        ), ARRAY_A );
        if ( ! $r ) return self::form_config( $form_key );
        return [
            'form_key' => $r['form_key'], 'title' => $r['title'], 'subtitle' => $r['subtitle'],
            'icon' => $r['icon'], 'request_type' => $r['request_type'], 'standard' => $r['standard_ref'],
            'min_fields' => json_decode( $r['min_fields'] ?? '[]', true ) ?: [],
            'sections' => json_decode( $r['sections_json'] ?? '[]', true ) ?: [],
        ];
    }

    public static function template_meta( string $form_key ): ?array {
        $cfg = self::config_from_db( $form_key );
        if ( ! $cfg ) return null;
        return [
            'form_key' => $cfg['form_key'], 'title' => $cfg['title'], 'subtitle' => $cfg['subtitle'] ?? '',
            'icon' => $cfg['icon'] ?? '📋', 'standard' => $cfg['standard'] ?? '', 'request_type' => $cfg['request_type'],
        ];
    }

    public static function attachment_fields( string $form_key, array $form_data, array $row = [] ): array {
        $cfg = self::config_from_db( $form_key );
        if ( ! $cfg ) return [];

        $label_map = [];
        $option_map = [];
        foreach ( $cfg['sections'] as $sec ) {
            foreach ( $sec['fields'] as $f ) {
                $label_map[ $f['key'] ] = $f['label'];
                if ( ! empty( $f['options'] ) ) $option_map[ $f['key'] ] = $f['options'];
            }
        }

        $format_val = function ( $key, $val ) use ( $option_map ) {
            if ( is_array( $val ) ) {
                $opts = $option_map[ $key ] ?? [];
                return implode( '، ', array_map( fn( $v ) => $opts[ $v ] ?? $v, $val ) );
            }
            return ( $option_map[ $key ][ $val ] ?? null ) ?: (string) $val;
        };

        $priorities = [ 'low' => 'کم', 'normal' => 'معمولی', 'high' => 'بالا', 'urgent' => 'فوری' ];
        $core = [
            'title' => 'عنوان', 'priority' => 'اولویت', 'description' => 'شرح',
            'county' => 'شهرستان', 'city' => 'شهر', 'agency_name' => 'بنگاه',
            'contact_phone' => 'تلفن', 'contact_email' => 'ایمیل',
        ];
        $out = [];
        foreach ( $core as $k => $lbl ) {
            if ( empty( $row[ $k ] ) ) continue;
            $val = $k === 'priority' ? ( $priorities[ $row[ $k ] ] ?? $row[ $k ] ) : $row[ $k ];
            $out[] = [ 'key' => $k, 'label' => $lbl, 'value' => (string) $val ];
        }
        foreach ( $form_data as $k => $v ) {
            if ( $v === '' || $v === null || ( is_array( $v ) && ! $v ) ) continue;
            if ( isset( $core[ $k ] ) ) continue;
            $out[] = [ 'key' => $k, 'label' => $label_map[ $k ] ?? $k, 'value' => $format_val( $k, $v ) ];
        }
        return $out;
    }
}
