<?php
/**
 * melk-specialist-forms.php — بانک فرم‌های استاندارد متخصصان ساختمان
 * ISO / نظام مهندسی / بین‌المللی
 */
if ( ! defined( 'ABSPATH' ) ) exit;

class Melk_Specialist_Forms {

    private static function contact_fields(): array {
        return [
            [ 'key' => 'county', 'label' => 'شهرستان *', 'type' => 'text', 'required' => true, 'maps_to' => 'county', 'section' => 'contact' ],
            [ 'key' => 'city', 'label' => 'شهر', 'type' => 'text', 'maps_to' => 'city', 'section' => 'contact' ],
            [ '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' => 'service_areas', 'label' => 'مناطق فعالیت (با ، جدا)', 'type' => 'text', 'maps_to' => 'service_areas', 'placeholder' => 'شیراز، مرودشت، کازرون', 'section' => 'contact' ],
        ];
    }

    private static function license_fields(): array {
        return [
            [ 'key' => 'license_no', 'label' => 'شماره پروانه / کارت نظام مهندسی *', 'type' => 'text', 'required' => true, 'maps_to' => 'license_no', 'dir' => 'ltr', 'section' => 'license' ],
            [ 'key' => 'years_experience', 'label' => 'سابقه کار (سال) *', 'type' => 'number', 'required' => true, 'maps_to' => 'years_experience', 'min' => 0, 'section' => 'license' ],
            [ 'key' => 'credentials', 'label' => 'مدارک و گواهینامه‌ها', 'type' => 'textarea', 'maps_to' => 'credentials', 'rows' => 2, 'section' => 'license' ],
        ];
    }

    public static function catalog(): array {
        return [
            [
                'form_key'  => 'specialist_architect',
                'title'     => 'فرم ثبت‌نام معمار',
                'subtitle'  => 'ISO 9001 · نظام مهندسی · طراحی معماری',
                'icon'      => '🏛️',
                'specialty' => 'architect',
                'standard'  => 'AIA / نظام مهندسی ایران',
                'min_fields'=> [ 'license_no', 'years_experience', 'county', 'contact_phone', 'education_degree' ],
                'sections'  => [
                    [ 'key' => 'license', 'title' => '📜 پروانه و صلاحیت', 'fields' => array_merge( self::license_fields(), [
                        [ 'key' => 'education_degree', 'label' => 'مدرک تحصیلی *', 'type' => 'select', 'required' => true,
                          'options' => [ 'bachelor' => 'کارشناسی', 'master' => 'کارشناسی ارشد', 'phd' => 'دکتری' ] ],
                        [ 'key' => 'engineering_org_id', 'label' => 'کد عضویت نظام مهندسی', 'type' => 'text', 'dir' => 'ltr' ],
                    ] ) ],
                    [ 'key' => 'skills', 'title' => '🛠 مهارت‌ها', 'fields' => [
                        [ 'key' => 'design_software', 'label' => 'نرم‌افزارها', 'type' => 'multiselect',
                          'options' => [ 'autocad' => 'AutoCAD', 'revit' => 'Revit', 'sketchup' => 'SketchUp', '3dsmax' => '3ds Max', 'lumion' => 'Lumion' ] ],
                        [ 'key' => 'project_types', 'label' => 'نوع پروژه‌ها', 'type' => 'multiselect',
                          'options' => [ 'residential' => 'مسکونی', 'commercial' => 'تجاری', 'industrial' => 'صنعتی', 'renovation' => 'بازسازی', 'landscape' => 'فضای سبز' ] ],
                        [ 'key' => 'max_project_area_sqm', 'label' => 'حداکثر متراژ پروژه (m²)', 'type' => 'number' ],
                        [ 'key' => 'portfolio_url', 'label' => 'لینک نمونه‌کار', 'type' => 'text', 'dir' => 'ltr' ],
                    ] ],
                    [ 'key' => 'bio', 'title' => '📝 معرفی', 'fields' => [
                        [ 'key' => 'bio', 'label' => 'معرفی حرفه‌ای', 'type' => 'textarea', 'maps_to' => 'bio', 'rows' => 3 ],
                    ] ],
                    [ 'key' => 'contact', 'title' => '📍 تماس و حوزه فعالیت', 'fields' => self::contact_fields() ],
                ],
            ],
            [
                'form_key'  => 'specialist_structural',
                'title'     => 'فرم ثبت‌نام کارشناس سازه',
                'subtitle'  => 'Structural Engineer · ETABS / SAP',
                'icon'      => '🏗️',
                'specialty' => 'structural',
                'standard'  => 'ASCE / نظام مهندسی',
                'min_fields'=> [ 'license_no', 'years_experience', 'county', 'contact_phone', 'structure_systems' ],
                'sections'  => [
                    [ 'key' => 'license', 'title' => '📜 پروانه', 'fields' => self::license_fields() ],
                    [ 'key' => 'technical', 'title' => '⚙️ تخصص فنی', 'fields' => [
                        [ 'key' => 'structure_systems', 'label' => 'سیستم‌های سازه‌ای *', 'type' => 'multiselect', 'required' => true,
                          'options' => [ 'concrete' => 'بتن مسلح', 'steel' => 'فولاد', 'composite' => 'مرکب', 'masonry' => 'بنایی', 'timber' => 'چوب' ] ],
                        [ 'key' => 'analysis_software', 'label' => 'نرم‌افزار تحلیل', 'type' => 'multiselect',
                          'options' => [ 'etabs' => 'ETABS', 'sap2000' => 'SAP2000', 'safe' => 'SAFE', 'robot' => 'Robot' ] ],
                        [ 'key' => 'seismic_design', 'label' => 'طراحی لرزه‌ای', 'type' => 'select',
                          'options' => [ 'expert' => 'متخصص', 'experienced' => 'با تجربه', 'basic' => 'پایه' ] ],
                        [ 'key' => 'peer_review', 'label' => 'صلاحیت کنترل طرح', 'type' => 'select',
                          'options' => [ 'yes' => 'دارد', 'no' => 'ندارد' ] ],
                        [ 'key' => 'max_floors', 'label' => 'حداکثر طبقات طراحی‌شده', 'type' => 'number' ],
                    ] ],
                    [ 'key' => 'bio', 'title' => '📝 معرفی', 'fields' => [
                        [ 'key' => 'bio', 'label' => 'معرفی', 'type' => 'textarea', 'maps_to' => 'bio', 'rows' => 3 ],
                    ] ],
                    [ 'key' => 'contact', 'title' => '📍 تماس', 'fields' => self::contact_fields() ],
                ],
            ],
            [
                'form_key'  => 'specialist_mep',
                'title'     => 'فرم ثبت‌نام کارشناس تاسیسات',
                'subtitle'  => 'MEP · HVAC · برق · لوله‌کشی',
                'icon'      => '⚡',
                'specialty' => 'mep',
                'standard'  => 'ASHRAE / نظام مهندسی',
                'min_fields'=> [ 'license_no', 'years_experience', 'county', 'contact_phone', 'mep_disciplines' ],
                'sections'  => [
                    [ 'key' => 'license', 'title' => '📜 پروانه', 'fields' => self::license_fields() ],
                    [ 'key' => 'technical', 'title' => '🔧 حوزه‌های تاسیسات', 'fields' => [
                        [ 'key' => 'mep_disciplines', 'label' => 'رشته‌های تاسیسات *', 'type' => 'multiselect', 'required' => true,
                          'options' => [ 'hvac' => 'سرمایش/گرمایش', 'electrical' => 'برق', 'plumbing' => 'لوله‌کشی', 'fire' => 'آتش‌نشانی', 'elevator' => 'آسانسور' ] ],
                        [ 'key' => 'energy_audit', 'label' => 'ممیزی انرژی', 'type' => 'select', 'options' => [ 'yes' => 'دارد', 'no' => 'ندارد' ] ],
                        [ 'key' => 'green_building', 'label' => 'گواهی ساختمان سبز', 'type' => 'select',
                          'options' => [ 'leed' => 'LEED', 'breeam' => 'BREEAM', 'iran_green' => 'ایران سبز', 'none' => 'ندارد' ] ],
                        [ 'key' => 'max_capacity_kw', 'label' => 'حداکثر ظرفیت طراحی (kW)', 'type' => 'number' ],
                    ] ],
                    [ 'key' => 'bio', 'title' => '📝 معرفی', 'fields' => [
                        [ 'key' => 'bio', 'label' => 'معرفی', 'type' => 'textarea', 'maps_to' => 'bio', 'rows' => 3 ],
                    ] ],
                    [ 'key' => 'contact', 'title' => '📍 تماس', 'fields' => self::contact_fields() ],
                ],
            ],
            [
                'form_key'  => 'specialist_supervisor',
                'title'     => 'فرم ثبت‌نام ناظر ساختمان',
                'subtitle'  => 'Construction Supervisor · نظام مهندسی',
                'icon'      => '👷',
                'specialty' => 'supervisor',
                'standard'  => 'نظام مهندسی / ISO 45001',
                'min_fields'=> [ 'license_no', 'years_experience', 'county', 'contact_phone', 'supervisor_grade' ],
                'sections'  => [
                    [ 'key' => 'license', 'title' => '📜 پروانه ناظری', 'fields' => array_merge( self::license_fields(), [
                        [ 'key' => 'supervisor_grade', 'label' => 'پایه ناظری *', 'type' => 'select', 'required' => true,
                          'options' => [ '1' => 'پایه ۱', '2' => 'پایه ۲', '3' => 'پایه ۳' ] ],
                    ] ) ],
                    [ 'key' => 'technical', 'title' => '🏗 تجربه نظارت', 'fields' => [
                        [ 'key' => 'max_floors_supervised', 'label' => 'حداکثر طبقات نظارت‌شده', 'type' => 'number' ],
                        [ 'key' => 'construction_phases', 'label' => 'فازهای نظارت', 'type' => 'multiselect',
                          'options' => [ 'foundation' => 'فونداسیون', 'structure' => 'اسکلت', 'finishing' => 'نازک‌کاری', 'mep' => 'تاسیسات' ] ],
                        [ 'key' => 'project_scale', 'label' => 'مقیاس پروژه', 'type' => 'select',
                          'options' => [ 'small' => 'کوچک', 'medium' => 'متوسط', 'large' => 'بزرگ', 'mega' => 'عظیم' ] ],
                    ] ],
                    [ 'key' => 'bio', 'title' => '📝 معرفی', 'fields' => [
                        [ 'key' => 'bio', 'label' => 'معرفی', 'type' => 'textarea', 'maps_to' => 'bio', 'rows' => 3 ],
                    ] ],
                    [ 'key' => 'contact', 'title' => '📍 تماس', 'fields' => self::contact_fields() ],
                ],
            ],
            [
                'form_key'  => 'specialist_civil',
                'title'     => 'فرم ثبت‌نام مهندس عمران',
                'subtitle'  => 'Civil Engineer · راه و سازه',
                'icon'      => '🌉',
                'specialty' => 'civil',
                'standard'  => 'ASCE / نظام مهندسی',
                'min_fields'=> [ 'license_no', 'years_experience', 'county', 'contact_phone' ],
                'sections'  => [
                    [ 'key' => 'license', 'title' => '📜 پروانه', 'fields' => self::license_fields() ],
                    [ 'key' => 'technical', 'title' => '🔧 حوزه فعالیت', 'fields' => [
                        [ 'key' => 'civil_domains', 'label' => 'زمینه‌های کاری', 'type' => 'multiselect',
                          'options' => [ 'roads' => 'راه', 'water' => 'آب', 'surveying' => 'نقشه‌برداری', 'geotech' => 'ژئوتکنیک', 'construction' => 'ساخت' ] ],
                        [ 'key' => 'project_management', 'label' => 'مدیریت پروژه', 'type' => 'select', 'options' => [ 'yes' => 'دارد', 'no' => 'ندارد' ] ],
                    ] ],
                    [ 'key' => 'bio', 'title' => '📝 معرفی', 'fields' => [
                        [ 'key' => 'bio', 'label' => 'معرفی', 'type' => 'textarea', 'maps_to' => 'bio', 'rows' => 3 ],
                    ] ],
                    [ 'key' => 'contact', 'title' => '📍 تماس', 'fields' => self::contact_fields() ],
                ],
            ],
            [
                'form_key'  => 'specialist_interior',
                'title'     => 'فرم ثبت‌نام طراح داخلی',
                'subtitle'  => 'Interior Design · NCIDQ',
                'icon'      => '🎨',
                'specialty' => 'interior',
                'standard'  => 'NCIDQ / دکوراسیون',
                'min_fields'=> [ 'license_no', 'years_experience', 'county', 'contact_phone' ],
                'sections'  => [
                    [ 'key' => 'license', 'title' => '📜 صلاحیت', 'fields' => self::license_fields() ],
                    [ 'key' => 'technical', 'title' => '🎨 تخصص', 'fields' => [
                        [ 'key' => 'interior_styles', 'label' => 'سبک‌های طراحی', 'type' => 'multiselect',
                          'options' => [ 'modern' => 'مدرن', 'classic' => 'کلاسیک', 'minimal' => 'مینیمال', 'industrial' => 'صنعتی' ] ],
                        [ 'key' => 'space_types', 'label' => 'نوع فضا', 'type' => 'multiselect',
                          'options' => [ 'residential' => 'مسکونی', 'office' => 'اداری', 'retail' => 'تجاری', 'hospitality' => 'هتل/رستوران' ] ],
                        [ 'key' => '3d_rendering', 'label' => 'رندر سه‌بعدی', 'type' => 'select', 'options' => [ 'yes' => 'دارد', 'no' => 'ندارد' ] ],
                    ] ],
                    [ 'key' => 'bio', 'title' => '📝 معرفی', 'fields' => [
                        [ 'key' => 'bio', 'label' => 'معرفی', 'type' => 'textarea', 'maps_to' => 'bio', 'rows' => 3 ],
                    ] ],
                    [ 'key' => 'contact', 'title' => '📍 تماس', 'fields' => self::contact_fields() ],
                ],
            ],
            [
                'form_key'  => 'specialist_surveyor',
                'title'     => 'فرم ثبت‌نام نقشه‌بردار',
                'subtitle'  => 'Land Surveyor · GIS',
                'icon'      => '📐',
                'specialty' => 'surveyor',
                'standard'  => 'FIG / نظام مهندسی',
                'min_fields'=> [ 'license_no', 'years_experience', 'county', 'contact_phone' ],
                'sections'  => [
                    [ 'key' => 'license', 'title' => '📜 پروانه', 'fields' => self::license_fields() ],
                    [ 'key' => 'technical', 'title' => '📐 تجهیزات و خدمات', 'fields' => [
                        [ 'key' => 'survey_equipment', 'label' => 'تجهیزات', 'type' => 'multiselect',
                          'options' => [ 'total_station' => 'توتال استیشن', 'gps' => 'GPS/GNSS', 'drone' => 'پهپاد', 'laser' => 'لیزری' ] ],
                        [ 'key' => 'survey_services', 'label' => 'خدمات', 'type' => 'multiselect',
                          'options' => [ 'boundary' => 'تفکیکی', 'topographic' => 'توپوگرافی', 'as_built' => 'بیلت', 'gis' => 'GIS' ] ],
                        [ 'key' => 'cad_software', 'label' => 'نرم‌افزار', 'type' => 'multiselect',
                          'options' => [ 'autocad' => 'AutoCAD Civil', 'arcgis' => 'ArcGIS', 'qgis' => 'QGIS' ] ],
                    ] ],
                    [ 'key' => 'bio', 'title' => '📝 معرفی', 'fields' => [
                        [ 'key' => 'bio', 'label' => 'معرفی', 'type' => 'textarea', 'maps_to' => 'bio', 'rows' => 3 ],
                    ] ],
                    [ 'key' => 'contact', 'title' => '📍 تماس', 'fields' => self::contact_fields() ],
                ],
            ],
            [
                'form_key'  => 'specialist_quantity',
                'title'     => 'فرم ثبت‌نام متره و برآورد',
                'subtitle'  => 'Quantity Surveyor · BOQ',
                'icon'      => '📊',
                'specialty' => 'quantity_surveyor',
                'standard'  => 'RICS / متره و برآورد',
                'min_fields'=> [ 'license_no', 'years_experience', 'county', 'contact_phone' ],
                'sections'  => [
                    [ 'key' => 'license', 'title' => '📜 صلاحیت', 'fields' => self::license_fields() ],
                    [ 'key' => 'technical', 'title' => '📊 تخصص برآورد', 'fields' => [
                        [ 'key' => 'estimation_software', 'label' => 'نرم‌افزار', 'type' => 'multiselect',
                          'options' => [ 'excel' => 'Excel پیشرفته', 'tender' => 'تندر', 'rib' => 'RIB', 'custom' => 'اختصاصی' ] ],
                        [ 'key' => 'project_phases', 'label' => 'فاز برآورد', 'type' => 'multiselect',
                          'options' => [ 'feasibility' => 'امکان‌سنجی', 'tender' => 'مناقصه', 'control' => 'کنترل هزینه', 'final' => 'صورت‌وضعیت' ] ],
                    ] ],
                    [ 'key' => 'bio', 'title' => '📝 معرفی', 'fields' => [
                        [ 'key' => 'bio', 'label' => 'معرفی', 'type' => 'textarea', 'maps_to' => 'bio', 'rows' => 3 ],
                    ] ],
                    [ 'key' => 'contact', 'title' => '📍 تماس', 'fields' => self::contact_fields() ],
                ],
            ],
        ];
    }

    public static function bank_list( ?string $specialty = null ): array {
        $items = array_map( fn( $f ) => [
            'form_key'      => $f['form_key'],
            'title'         => $f['title'],
            'subtitle'      => $f['subtitle'] ?? '',
            'icon'          => $f['icon'] ?? '📋',
            'specialty'     => $f['specialty'],
            'standard'      => $f['standard'] ?? '',
            'min_fields'    => $f['min_fields'] ?? [],
            'section_count' => count( $f['sections'] ?? [] ),
        ], self::catalog() );
        if ( $specialty ) {
            $items = array_values( array_filter( $items, fn( $i ) => $i['specialty'] === $specialty ) );
        }
        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_specialty( string $specialty ): ?array {
        foreach ( self::catalog() as $f ) {
            if ( $f['specialty'] === $specialty ) 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 = [ 'specialty' => $cfg['specialty'], 'form_template_key' => $form_key ];
        $form_data = [];
        $errors = [];

        // service_areas از رشته به آرایه
        if ( isset( $values['service_areas'] ) && is_string( $values['service_areas'] ) ) {
            $values['service_areas'] = array_values( array_filter( array_map( 'trim',
                preg_split( '/[،,]/u', $values['service_areas'] ) ?: []
            ) ) );
        }

        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 === 'service_areas' && is_array( $val ) ) {
                $columns[ $target ] = $val;
            } elseif ( $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_specialist_form_templates WHERE form_key = %s", $f['form_key']
            ) );
            $row = [
                'form_key'      => $f['form_key'],
                'title'         => $f['title'],
                'subtitle'      => $f['subtitle'] ?? '',
                'icon'          => $f['icon'] ?? '📋',
                'specialty'     => $f['specialty'],
                '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_specialist_form_templates", $row, [ 'id' => $exists ] );
                $done[] = "updated:{$f['form_key']}";
            } else {
                $wpdb->insert( "{$pre}melk_specialist_form_templates", $row );
                $done[] = "created:{$f['form_key']}";
            }
        }
        return $done;
    }

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

    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;
        };

        $out = [];
        $core = [
            'license_no' => 'شماره پروانه', 'years_experience' => 'سابقه (سال)',
            'county' => 'شهرستان', 'city' => 'شهر',
            'contact_phone' => 'تلفن', 'contact_email' => 'ایمیل',
            'bio' => 'معرفی', 'credentials' => 'مدارک',
        ];
        foreach ( $core as $k => $lbl ) {
            if ( empty( $row[ $k ] ) ) continue;
            $out[] = [ 'key' => $k, 'label' => $lbl, 'value' => (string) $row[ $k ] ];
        }
        if ( ! empty( $row['service_areas'] ) ) {
            $areas = is_string( $row['service_areas'] ) ? json_decode( $row['service_areas'], true ) : $row['service_areas'];
            if ( is_array( $areas ) && $areas ) {
                $out[] = [ 'key' => 'service_areas', 'label' => 'مناطق فعالیت', 'value' => implode( '، ', $areas ) ];
            }
        }

        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;
    }
}
