<?php
/**
 * melk-listing-forms.php — بانک فرم‌های استاندارد آگهی ملک (RESO / CREA / Iranian)
 */
if ( ! defined( 'ABSPATH' ) ) exit;

class Melk_Listing_Forms {

    /** فیلدهای مشترک همه فرم‌ها */
    private static function common_location_fields(): array {
        return [
            [ 'key' => 'district_id', 'label' => 'منطقه *', 'type' => 'district_select', 'required' => true, 'maps_to' => 'district_id', 'section' => 'location' ],
            [ 'key' => 'neighborhood_id', 'label' => 'محله', 'type' => 'neighborhood_select', 'maps_to' => 'neighborhood_id', 'section' => 'location' ],
            [ 'key' => 'renovation_code', 'label' => 'کد نوسازی', 'type' => 'text', 'maps_to' => 'renovation_code', 'dir' => 'ltr', 'section' => 'location' ],
            [ 'key' => 'address_detail', 'label' => 'آدرس تکمیلی / کوچه', 'type' => 'text', 'section' => 'location' ],
        ];
    }

    private static function common_listing_fields(): array {
        return [
            [ 'key' => 'title', 'label' => 'عنوان آگهی *', 'type' => 'text', 'required' => true, 'maps_to' => 'title', 'section' => 'basic',
              'placeholder' => 'عنوان کوتاه و گویا برای آگهی' ],
            [ 'key' => 'description', 'label' => 'توضیحات', 'type' => 'textarea', 'maps_to' => 'description', 'section' => 'basic', 'rows' => 3 ],
        ];
    }

    /** تعریف کامل بانک فرم */
    public static function catalog(): array {
        return [
            [
                'form_key'      => 'sale_residential_apartment',
                'title'         => 'فروش آپارتمان مسکونی',
                'subtitle'      => 'RESO · Residential · For Sale',
                'icon'          => '🏢',
                'deal_type'     => 'sale',
                'property_type' => 'residential_apartment',
                'standard'      => 'RESO PropertyType / StandardStatus',
                'min_fields'    => [ 'title', 'price', 'area_sqm', 'rooms', 'district_id' ],
                'sections'      => [
                    [ 'key' => 'basic', 'title' => '📋 اطلاعات اصلی', 'fields' => array_merge(
                        self::common_listing_fields(),
                        [
                            [ 'key' => 'price', 'label' => 'قیمت فروش (تومان) *', 'type' => 'number', 'required' => true, 'maps_to' => 'price', 'section' => 'basic', 'dir' => 'ltr' ],
                            [ 'key' => 'area_sqm', 'label' => 'متراژ بنا (m²) *', 'type' => 'number', 'required' => true, 'maps_to' => 'area_sqm', 'section' => 'pricing' ],
                            [ 'key' => 'rooms', 'label' => 'تعداد خواب *', 'type' => 'number', 'required' => true, 'maps_to' => 'rooms', 'min' => 0, 'section' => 'property' ],
                        ]
                    ) ],
                    [ 'key' => 'property', 'title' => '🏠 مشخصات ملک', 'fields' => [
                        [ 'key' => 'floor_no', 'label' => 'طبقه', 'type' => 'number', 'section' => 'property' ],
                        [ 'key' => 'total_floors', 'label' => 'تعداد کل طبقات', 'type' => 'number', 'section' => 'property' ],
                        [ 'key' => 'year_built', 'label' => 'سال ساخت', 'type' => 'number', 'section' => 'property', 'dir' => 'ltr' ],
                        [ 'key' => 'document_type', 'label' => 'نوع سند *', 'type' => 'select', 'required' => true, 'section' => 'property',
                          'options' => [
                              'single_deed' => 'سند تک‌برگ',
                              'condominium' => 'تفکیکی / آپارتمانی',
                              'endowment'   => 'اوقافی',
                              'other'       => 'سایر',
                          ] ],
                        [ 'key' => 'parking', 'label' => 'پارکینگ', 'type' => 'select', 'section' => 'property',
                          'options' => [ 'none' => 'ندارد', 'open' => 'روباز', 'covered' => 'مسقف', 'multi' => 'چند واحدی' ] ],
                        [ 'key' => 'elevator', 'label' => 'آسانسور', 'type' => 'select', 'section' => 'property',
                          'options' => [ 'yes' => 'دارد', 'no' => 'ندارد' ] ],
                        [ 'key' => 'heating', 'label' => 'سیستم گرمایش', 'type' => 'select', 'section' => 'property',
                          'options' => [ 'radiator' => 'شوفاژ', 'floor' => 'کف', 'package' => 'پکیج', 'chiller' => 'چیلر', 'none' => 'ندارد' ] ],
                        [ 'key' => 'condition', 'label' => 'وضعیت ملک', 'type' => 'select', 'section' => 'property',
                          'options' => [ 'new' => 'نوساز', 'renovated' => 'بازسازی‌شده', 'used' => 'قدیمی' ] ],
                    ] ],
                    [ 'key' => 'location', 'title' => '📍 موقعیت', 'fields' => self::common_location_fields() ],
                ],
            ],
            [
                'form_key'      => 'sale_residential_villa',
                'title'         => 'فروش ویلا / ساختمان',
                'subtitle'      => 'RESO · Residential · Detached',
                'icon'          => '🏡',
                'deal_type'     => 'sale',
                'property_type' => 'residential_villa',
                'standard'      => 'RESO PropertySubType',
                'min_fields'    => [ 'title', 'price', 'area_sqm', 'land_area_sqm', 'district_id' ],
                'sections'      => [
                    [ 'key' => 'basic', 'title' => '📋 اطلاعات اصلی', 'fields' => array_merge(
                        self::common_listing_fields(),
                        [
                            [ 'key' => 'price', 'label' => 'قیمت فروش (تومان) *', 'type' => 'number', 'required' => true, 'maps_to' => 'price', 'dir' => 'ltr' ],
                            [ 'key' => 'area_sqm', 'label' => 'متراژ بنا (m²) *', 'type' => 'number', 'required' => true, 'maps_to' => 'area_sqm' ],
                            [ 'key' => 'land_area_sqm', 'label' => 'متراژ زمین (m²) *', 'type' => 'number', 'required' => true ],
                            [ 'key' => 'rooms', 'label' => 'تعداد خواب', 'type' => 'number', 'maps_to' => 'rooms', 'min' => 0 ],
                        ]
                    ) ],
                    [ 'key' => 'property', 'title' => '🏠 مشخصات', 'fields' => [
                        [ 'key' => 'floors_count', 'label' => 'تعداد طبقات', 'type' => 'number' ],
                        [ 'key' => 'yard_area_sqm', 'label' => 'متراژ حیاط (m²)', 'type' => 'number' ],
                        [ 'key' => 'document_type', 'label' => 'نوع سند *', 'type' => 'select', 'required' => true,
                          'options' => [ 'single_deed' => 'سند تک‌برگ', 'shared' => 'مشاعی', 'other' => 'سایر' ] ],
                        [ 'key' => 'pool', 'label' => 'استخر', 'type' => 'select', 'options' => [ 'yes' => 'دارد', 'no' => 'ندارد' ] ],
                    ] ],
                    [ 'key' => 'location', 'title' => '📍 موقعیت', 'fields' => self::common_location_fields() ],
                ],
            ],
            [
                'form_key'      => 'sale_land_residential',
                'title'         => 'فروش زمین مسکونی',
                'subtitle'      => 'RESO · Land · LotSizeArea',
                'icon'          => '📐',
                'deal_type'     => 'land_sale',
                'property_type' => 'residential_land',
                'standard'      => 'RESO LotSize / Zoning',
                'min_fields'    => [ 'title', 'land_area_sqm', 'land_use', 'price', 'district_id' ],
                'sections'      => [
                    [ 'key' => 'basic', 'title' => '📋 اطلاعات اصلی', 'fields' => array_merge(
                        self::common_listing_fields(),
                        [
                            [ 'key' => 'price', 'label' => 'قیمت کل (تومان) *', 'type' => 'number', 'required' => true, 'maps_to' => 'price', 'dir' => 'ltr' ],
                            [ 'key' => 'price_per_sqm', 'label' => 'قیمت هر متر (تومان)', 'type' => 'number', 'dir' => 'ltr' ],
                        ]
                    ) ],
                    [ 'key' => 'land', 'title' => '📐 مشخصات زمین', 'fields' => [
                        [ 'key' => 'land_area_sqm', 'label' => 'مساحت زمین (m²) *', 'type' => 'number', 'required' => true, 'maps_to' => 'area_sqm' ],
                        [ 'key' => 'land_use', 'label' => 'کاربری *', 'type' => 'select', 'required' => true,
                          'options' => [
                              'residential' => 'مسکونی',
                              'commercial'  => 'تجاری',
                              'mixed'       => 'مختلط',
                              'agricultural'=> 'کشاورزی',
                              'industrial'  => 'صنعتی',
                          ] ],
                        [ 'key' => 'frontage_m', 'label' => 'بر زمین (متر)', 'type' => 'number' ],
                        [ 'key' => 'depth_m', 'label' => 'عمق زمین (متر)', 'type' => 'number' ],
                        [ 'key' => 'utilities', 'label' => 'انشعابات', 'type' => 'multiselect',
                          'options' => [ 'water' => 'آب', 'electricity' => 'برق', 'gas' => 'گاز', 'sewage' => 'فاضلاب' ] ],
                        [ 'key' => 'building_permit', 'label' => 'وضعیت پروانه', 'type' => 'select',
                          'options' => [ 'has_permit' => 'دارای پروانه', 'pending' => 'در دست اقدام', 'none' => 'ندارد' ] ],
                        [ 'key' => 'topography', 'label' => 'توپوگرافی', 'type' => 'select',
                          'options' => [ 'flat' => 'هموار', 'slope' => 'شیب‌دار', 'irregular' => 'نامنظم' ] ],
                    ] ],
                    [ 'key' => 'location', 'title' => '📍 موقعیت', 'fields' => self::common_location_fields() ],
                ],
            ],
            [
                'form_key'      => 'rent_residential_apartment',
                'title'         => 'اجاره مسکونی',
                'subtitle'      => 'RESO · Lease · Residential',
                'icon'          => '🔑',
                'deal_type'     => 'rent',
                'property_type' => 'residential_apartment',
                'standard'      => 'RESO LeaseAmount / LeaseTerm',
                'min_fields'    => [ 'title', 'rent_amount', 'rent_period', 'area_sqm', 'district_id' ],
                'sections'      => [
                    [ 'key' => 'basic', 'title' => '📋 اطلاعات اصلی', 'fields' => array_merge(
                        self::common_listing_fields(),
                        [
                            [ 'key' => 'rent_amount', 'label' => 'مبلغ اجاره (تومان) *', 'type' => 'number', 'required' => true, 'maps_to' => 'price', 'dir' => 'ltr' ],
                            [ 'key' => 'rent_period', 'label' => 'دوره اجاره *', 'type' => 'select', 'required' => true, 'maps_to' => 'rent_period',
                              'options' => [ 'monthly' => 'ماهانه', 'annual' => 'سالانه', 'daily' => 'روزانه' ] ],
                            [ 'key' => 'deposit_amount', 'label' => 'ودیعه / رهن (تومان)', 'type' => 'number', 'dir' => 'ltr' ],
                            [ 'key' => 'area_sqm', 'label' => 'متراژ (m²) *', 'type' => 'number', 'required' => true, 'maps_to' => 'area_sqm' ],
                            [ 'key' => 'rooms', 'label' => 'تعداد خواب', 'type' => 'number', 'maps_to' => 'rooms', 'min' => 0 ],
                        ]
                    ) ],
                    [ 'key' => 'lease', 'title' => '📄 شرایط اجاره', 'fields' => [
                        [ 'key' => 'furnished', 'label' => 'مبله', 'type' => 'select', 'options' => [ 'yes' => 'مبله', 'no' => 'غیرمبله', 'semi' => 'نیمه‌مبله' ] ],
                        [ 'key' => 'min_lease_months', 'label' => 'حداقل مدت قرارداد (ماه)', 'type' => 'number' ],
                        [ 'key' => 'pets_allowed', 'label' => 'حیوان خانگی', 'type' => 'select', 'options' => [ 'yes' => 'مجاز', 'no' => 'غیرمجاز' ] ],
                        [ 'key' => 'utilities_included', 'label' => 'شارژ / آب / گاز', 'type' => 'select',
                          'options' => [ 'tenant' => 'مستأجر', 'owner' => 'مالک', 'shared' => 'مشترک' ] ],
                    ] ],
                    [ 'key' => 'location', 'title' => '📍 موقعیت', 'fields' => self::common_location_fields() ],
                ],
            ],
            [
                'form_key'      => 'rent_commercial_retail',
                'title'         => 'اجاره تجاری / مغازه',
                'subtitle'      => 'RESO · Commercial · Retail',
                'icon'          => '🏪',
                'deal_type'     => 'rent_commercial',
                'property_type' => 'commercial_retail',
                'standard'      => 'RESO CommercialLease',
                'min_fields'    => [ 'title', 'rent_amount', 'area_sqm', 'commercial_use', 'district_id' ],
                'sections'      => [
                    [ 'key' => 'basic', 'title' => '📋 اطلاعات اصلی', 'fields' => array_merge(
                        self::common_listing_fields(),
                        [
                            [ 'key' => 'rent_amount', 'label' => 'اجاره ماهانه (تومان) *', 'type' => 'number', 'required' => true, 'maps_to' => 'price', 'dir' => 'ltr' ],
                            [ 'key' => 'rent_period', 'label' => 'دوره', 'type' => 'select', 'maps_to' => 'rent_period',
                              'options' => [ 'monthly' => 'ماهانه', 'annual' => 'سالانه' ] ],
                            [ 'key' => 'area_sqm', 'label' => 'متراژ (m²) *', 'type' => 'number', 'required' => true, 'maps_to' => 'area_sqm' ],
                        ]
                    ) ],
                    [ 'key' => 'commercial', 'title' => '🏪 کاربری تجاری', 'fields' => [
                        [ 'key' => 'commercial_use', 'label' => 'نوع کاربری *', 'type' => 'select', 'required' => true,
                          'options' => [ 'retail' => 'خرده‌فروشی', 'restaurant' => 'رستوران', 'service' => 'خدماتی', 'medical' => 'پزشکی', 'other' => 'سایر' ] ],
                        [ 'key' => 'ceiling_height_m', 'label' => 'ارتفاع سقف (متر)', 'type' => 'number' ],
                        [ 'key' => 'street_frontage', 'label' => 'نمای خیابان', 'type' => 'select', 'options' => [ 'main' => 'اصلی', 'side' => 'فرعی', 'alley' => 'کوچه' ] ],
                        [ 'key' => 'transfer_fee', 'label' => 'حق سرقفلی', 'type' => 'number', 'dir' => 'ltr' ],
                    ] ],
                    [ 'key' => 'location', 'title' => '📍 موقعیت', 'fields' => self::common_location_fields() ],
                ],
            ],
            [
                'form_key'      => 'partnership_land',
                'title'         => 'مشارکت در ساخت',
                'subtitle'      => 'Joint Venture · Iran',
                'icon'          => '🤝',
                'deal_type'     => 'partnership',
                'property_type' => 'residential_land',
                'standard'      => 'JV / Partnership Agreement',
                'min_fields'    => [ 'title', 'land_area_sqm', 'land_use', 'owner_share_pct', 'district_id' ],
                'sections'      => [
                    [ 'key' => 'basic', 'title' => '📋 اطلاعات اصلی', 'fields' => self::common_listing_fields() ],
                    [ 'key' => 'land', 'title' => '📐 زمین', 'fields' => [
                        [ 'key' => 'land_area_sqm', 'label' => 'مساحت زمین (m²) *', 'type' => 'number', 'required' => true, 'maps_to' => 'area_sqm' ],
                        [ 'key' => 'land_use', 'label' => 'کاربری *', 'type' => 'select', 'required' => true,
                          'options' => [ 'residential' => 'مسکونی', 'commercial' => 'تجاری', 'mixed' => 'مختلط' ] ],
                        [ 'key' => 'document_type', 'label' => 'نوع سند', 'type' => 'select',
                          'options' => [ 'single_deed' => 'تک‌برگ', 'shared' => 'مشاعی', 'endowment' => 'اوقافی' ] ],
                    ] ],
                    [ 'key' => 'partnership', 'title' => '🤝 شرایط مشارکت', 'fields' => [
                        [ 'key' => 'owner_share_pct', 'label' => 'سهم مالک زمین (%) *', 'type' => 'number', 'required' => true, 'min' => 0, 'max' => 100 ],
                        [ 'key' => 'builder_share_pct', 'label' => 'سهم سازنده (%)', 'type' => 'number', 'min' => 0, 'max' => 100 ],
                        [ 'key' => 'project_duration_months', 'label' => 'مدت پروژه (ماه)', 'type' => 'number' ],
                        [ 'key' => 'units_count', 'label' => 'تعداد واحد پیش‌بینی', 'type' => 'number' ],
                        [ 'key' => 'license_status', 'label' => 'وضعیت مجوز', 'type' => 'select',
                          'options' => [ 'has_license' => 'دارای پروانه', 'pending' => 'در دست اقدام', 'none' => 'ندارد' ] ],
                        [ 'key' => 'estimated_value', 'label' => 'ارزش تقریبی زمین (تومان)', 'type' => 'number', 'maps_to' => 'price', 'dir' => 'ltr' ],
                    ] ],
                    [ 'key' => 'location', 'title' => '📍 موقعیت', 'fields' => self::common_location_fields() ],
                ],
            ],
            [
                'form_key'      => 'pre_sale_apartment',
                'title'         => 'پیش‌فروش / Off-plan',
                'subtitle'      => 'Pre-construction · RESO',
                'icon'          => '🏗️',
                'deal_type'     => 'pre_sale',
                'property_type' => 'residential_apartment',
                'standard'      => 'RESO NewConstruction',
                'min_fields'    => [ 'title', 'price', 'area_sqm', 'delivery_date', 'district_id' ],
                'sections'      => [
                    [ 'key' => 'basic', 'title' => '📋 اطلاعات اصلی', 'fields' => array_merge(
                        self::common_listing_fields(),
                        [
                            [ 'key' => 'price', 'label' => 'قیمت پیش‌فروش (تومان) *', 'type' => 'number', 'required' => true, 'maps_to' => 'price', 'dir' => 'ltr' ],
                            [ 'key' => 'area_sqm', 'label' => 'متراژ واحد (m²) *', 'type' => 'number', 'required' => true, 'maps_to' => 'area_sqm' ],
                            [ 'key' => 'rooms', 'label' => 'خواب', 'type' => 'number', 'maps_to' => 'rooms' ],
                        ]
                    ) ],
                    [ 'key' => 'project', 'title' => '🏗️ پروژه', 'fields' => [
                        [ 'key' => 'developer_name', 'label' => 'نام سازنده / مجری', 'type' => 'text' ],
                        [ 'key' => 'project_name', 'label' => 'نام پروژه', 'type' => 'text' ],
                        [ 'key' => 'delivery_date', 'label' => 'تاریخ تحویل تقریبی *', 'type' => 'text', 'required' => true, 'placeholder' => 'مثلاً ۱۴۰۷/۰۶' ],
                        [ 'key' => 'completion_pct', 'label' => 'درصد پیشرفت', 'type' => 'number', 'min' => 0, 'max' => 100 ],
                        [ 'key' => 'payment_plan', 'label' => 'شرایط پرداخت', 'type' => 'textarea', 'rows' => 2 ],
                        [ 'key' => 'floor_no', 'label' => 'طبقه', 'type' => 'number' ],
                    ] ],
                    [ 'key' => 'location', 'title' => '📍 موقعیت', 'fields' => self::common_location_fields() ],
                ],
            ],
            [
                'form_key'      => 'mortgage_residential',
                'title'         => 'رهن و اجاره',
                'subtitle'      => 'Iranian · Mortgage + Rent',
                'icon'          => '🏦',
                'deal_type'     => 'mortgage',
                'property_type' => 'residential_apartment',
                'standard'      => 'Iranian Real Estate',
                'min_fields'    => [ 'title', 'mortgage_amount', 'rent_amount', 'area_sqm', 'district_id' ],
                'sections'      => [
                    [ 'key' => 'basic', 'title' => '📋 اطلاعات اصلی', 'fields' => array_merge(
                        self::common_listing_fields(),
                        [
                            [ 'key' => 'mortgage_amount', 'label' => 'مبلغ رهن (تومان) *', 'type' => 'number', 'required' => true, 'dir' => 'ltr' ],
                            [ 'key' => 'rent_amount', 'label' => 'مبلغ اجاره ماهانه (تومان) *', 'type' => 'number', 'required' => true, 'maps_to' => 'price', 'dir' => 'ltr' ],
                            [ 'key' => 'area_sqm', 'label' => 'متراژ (m²) *', 'type' => 'number', 'required' => true, 'maps_to' => 'area_sqm' ],
                            [ 'key' => 'rooms', 'label' => 'خواب', 'type' => 'number', 'maps_to' => 'rooms' ],
                        ]
                    ) ],
                    [ 'key' => 'location', 'title' => '📍 موقعیت', 'fields' => self::common_location_fields() ],
                ],
            ],
            [
                'form_key'      => 'exchange_general',
                'title'         => 'معاوضه ملک',
                'subtitle'      => 'Property Exchange',
                'icon'          => '🔄',
                'deal_type'     => 'exchange',
                'property_type' => 'residential_apartment',
                'standard'      => 'Exchange / Trade',
                'min_fields'    => [ 'title', 'area_sqm', 'desired_property_type', 'district_id' ],
                'sections'      => [
                    [ 'key' => 'basic', 'title' => '📋 ملک فعلی', 'fields' => array_merge(
                        self::common_listing_fields(),
                        [
                            [ 'key' => 'area_sqm', 'label' => 'متراژ ملک فعلی (m²) *', 'type' => 'number', 'required' => true, 'maps_to' => 'area_sqm' ],
                            [ 'key' => 'rooms', 'label' => 'خواب', 'type' => 'number', 'maps_to' => 'rooms' ],
                            [ 'key' => 'estimated_value', 'label' => 'ارزش تقریبی (تومان)', 'type' => 'number', 'maps_to' => 'price', 'dir' => 'ltr' ],
                        ]
                    ) ],
                    [ 'key' => 'desired', 'title' => '🎯 ملک مطلوب', 'fields' => [
                        [ 'key' => 'desired_property_type', 'label' => 'نوع ملک مطلوب *', 'type' => 'select', 'required' => true,
                          'options' => [
                              'residential_apartment' => 'آپارتمان',
                              'residential_villa'     => 'ویلا',
                              'residential_land'      => 'زمین',
                              'commercial_retail'     => 'تجاری',
                          ] ],
                        [ 'key' => 'desired_area_min', 'label' => 'حداقل متراژ مطلوب', 'type' => 'number' ],
                        [ 'key' => 'desired_districts', 'label' => 'مناطق مطلوب', 'type' => 'text', 'placeholder' => 'مثلاً منطقه ۱، ۳' ],
                        [ 'key' => 'price_difference', 'label' => 'ما به التفاوت قابل پرداخت', 'type' => 'number', 'dir' => 'ltr' ],
                    ] ],
                    [ 'key' => 'location', 'title' => '📍 موقعیت ملک فعلی', 'fields' => self::common_location_fields() ],
                ],
            ],
            [
                'form_key'      => 'rent_commercial_office',
                'title'         => 'اجاره دفتر اداری',
                'subtitle'      => 'RESO · Office · Lease',
                'icon'          => '🏢',
                'deal_type'     => 'rent_commercial',
                'property_type' => 'commercial_office',
                'standard'      => 'RESO CommercialLease',
                'min_fields'    => [ 'title', 'rent_amount', 'area_sqm', 'district_id' ],
                'sections'      => [
                    [ 'key' => 'basic', 'title' => '📋 اطلاعات اصلی', 'fields' => array_merge(
                        self::common_listing_fields(),
                        [
                            [ 'key' => 'rent_amount', 'label' => 'اجاره ماهانه (تومان) *', 'type' => 'number', 'required' => true, 'maps_to' => 'price', 'dir' => 'ltr' ],
                            [ 'key' => 'rent_period', 'label' => 'دوره', 'type' => 'select', 'maps_to' => 'rent_period',
                              'options' => [ 'monthly' => 'ماهانه', 'annual' => 'سالانه' ] ],
                            [ 'key' => 'area_sqm', 'label' => 'متراژ (m²) *', 'type' => 'number', 'required' => true, 'maps_to' => 'area_sqm' ],
                        ]
                    ) ],
                    [ 'key' => 'office', 'title' => '🏢 دفتر', 'fields' => [
                        [ 'key' => 'floor_no', 'label' => 'طبقه', 'type' => 'number' ],
                        [ 'key' => 'parking_spots', 'label' => 'تعداد پارکینگ', 'type' => 'number' ],
                        [ 'key' => 'hvac_type', 'label' => 'سرمایش/گرمایش', 'type' => 'select',
                          'options' => [ 'central' => 'مرکزی', 'split' => 'اسپلیت', 'none' => 'ندارد' ] ],
                        [ 'key' => 'furnished', 'label' => 'مبله', 'type' => 'select', 'options' => [ 'yes' => 'بله', 'no' => 'خیر' ] ],
                    ] ],
                    [ 'key' => 'location', 'title' => '📍 موقعیت', 'fields' => self::common_location_fields() ],
                ],
            ],
        ];
    }

    /** فهرست بانک فرم (بدون جزئیات فیلدها) */
    public static function bank_list(): array {
        return array_map( function ( $f ) {
            return [
                'form_key'      => $f['form_key'],
                'title'         => $f['title'],
                'subtitle'      => $f['subtitle'] ?? '',
                'icon'          => $f['icon'] ?? '📋',
                'deal_type'     => $f['deal_type'],
                'property_type' => $f['property_type'],
                'standard'      => $f['standard'] ?? '',
                'min_fields'    => $f['min_fields'] ?? [],
                'section_count' => count( $f['sections'] ?? [] ),
            ];
        }, self::catalog() );
    }

    /** پیکربندی کامل یک فرم */
    public static function form_config( string $form_key ): ?array {
        foreach ( self::catalog() as $f ) {
            if ( $f['form_key'] === $form_key ) {
                return $f;
            }
        }
        return null;
    }

    /** نگاشت داده فرم به ستون‌های جدول + form_data */
    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' => [ 'فرم نامعتبر است' ] ];
        }

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

        $columns  = [
            'deal_type'     => $cfg['deal_type'],
            'property_type' => $cfg['property_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 === 'price' && $key === 'rent_amount' ) {
                $columns['price'] = is_numeric( $val ) ? (float) $val : null;
            } 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 ];
    }

    /** درج/به‌روزرسانی قالب‌ها در بانک DB */
    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_listing_form_templates WHERE form_key = %s", $f['form_key']
            ) );
            $row = [
                'form_key'      => $f['form_key'],
                'title'         => $f['title'],
                'subtitle'      => $f['subtitle'] ?? '',
                'icon'          => $f['icon'] ?? '📋',
                'deal_type'     => $f['deal_type'],
                'property_type' => $f['property_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_listing_form_templates", $row, [ 'id' => $exists ] );
                $done[] = "updated:{$f['form_key']}";
            } else {
                $wpdb->insert( "{$pre}melk_listing_form_templates", $row );
                $done[] = "created:{$f['form_key']}";
            }
        }
        return $done;
    }

    /** خواندن از DB با fallback به catalog */
    public static function bank_from_db(): array {
        global $wpdb;
        $pre  = $wpdb->prefix;
        $rows = $wpdb->get_results(
            "SELECT * FROM {$pre}melk_listing_form_templates WHERE is_active = 1 ORDER BY sort_order ASC",
            ARRAY_A
        );
        if ( ! $rows ) return self::bank_list();
        return array_map( function ( $r ) {
            return [
                'form_key'      => $r['form_key'],
                'title'         => $r['title'],
                'subtitle'      => $r['subtitle'],
                'icon'          => $r['icon'],
                'deal_type'     => $r['deal_type'],
                'property_type' => $r['property_type'],
                'standard'      => $r['standard_ref'],
                'min_fields'    => json_decode( $r['min_fields'] ?? '[]', true ) ?: [],
                'section_count' => count( json_decode( $r['sections_json'] ?? '[]', true ) ?: [] ),
            ];
        }, $rows );
    }

    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_listing_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'],
            'deal_type'     => $r['deal_type'],
            'property_type' => $r['property_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'] ?? '',
        ];
    }

    /** فیلدهای فرم پیوست با برچسب فارسی برای نمایش */
    public static function attachment_fields( string $form_key, array $form_data, array $listing = [] ): 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'] ) && is_array( $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 ) );
            }
            $opts = $option_map[ $key ] ?? [];
            return $opts[ $val ] ?? (string) $val;
        };

        $out = [];
        $core = [
            'title'           => 'عنوان آگهی',
            'price'           => 'قیمت / اجاره (تومان)',
            'area_sqm'        => 'متراژ (m²)',
            'rooms'           => 'تعداد خواب',
            'rent_period'     => 'دوره اجاره',
            'renovation_code' => 'کد نوسازی',
            'district_id'     => 'منطقه',
            'neighborhood_id' => 'محله',
        ];
        $rent_labels = [ 'monthly' => 'ماهانه', 'annual' => 'سالانه', 'daily' => 'روزانه' ];

        foreach ( $core as $k => $lbl ) {
            if ( ! isset( $listing[ $k ] ) || $listing[ $k ] === null || $listing[ $k ] === '' ) continue;
            $val = $listing[ $k ];
            if ( $k === 'rent_period' ) $val = $rent_labels[ $val ] ?? $val;
            if ( $k === 'price' && is_numeric( $val ) ) $val = number_format( (float) $val );
            $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;
    }
}
