"""
Form Schemas — Inventory Module.

اسکیماهای فرم برای ماژول مدیریت انبار و موجودی.
"""

ITEM_FORM = {
    "id": "inv_item_form",
    "title": "فرم کالا",
    "sections": [
        {
            "id": "basic",
            "title": "اطلاعات پایه",
            "fields": [
                {"name": "item_code", "label": "کد کالا", "type": "text", "required": True, "max_length": 50},
                {"name": "item_name", "label": "نام کالا", "type": "text", "required": True, "max_length": 200},
                {"name": "item_name_fa", "label": "نام فارسی", "type": "text", "max_length": 200},
                {"name": "description", "label": "توضیحات", "type": "textarea"},
                {"name": "item_type", "label": "نوع کالا", "type": "select", "required": True, "options": [
                    {"value": "RAW_MATERIAL", "label": "ماده اولیه"},
                    {"value": "SEMI_FINISHED", "label": "نیمه‌ساخته"},
                    {"value": "FINISHED_GOOD", "label": "کالای ساخته"},
                    {"value": "SERVICE", "label": "خدمات"},
                    {"value": "CONSUMABLE", "label": "مصرفی"},
                    {"value": "ASSET", "label": "دارایی"},
                ]},
                {"name": "item_group", "label": "گروه کالا", "type": "lookup", "lookup_endpoint": "/api/v1/inventory/item-groups/"},
                {"name": "base_uom", "label": "واحد اندازه‌گیری پایه", "type": "lookup", "required": True, "lookup_endpoint": "/api/v1/inventory/units/"},
            ],
        },
        {
            "id": "tracking",
            "title": "ردیابی و مدیریت",
            "fields": [
                {"name": "batch_managed", "label": "مدیریت بچ", "type": "checkbox"},
                {"name": "serial_managed", "label": "مدیریت سریال", "type": "checkbox"},
                {"name": "expiry_managed", "label": "مدیریت انقضا", "type": "checkbox"},
                {"name": "abc_classification", "label": "طبقه‌بندی ABC", "type": "select", "options": [
                    {"value": "A", "label": "A — باارزش"},
                    {"value": "B", "label": "B — متوسط"},
                    {"value": "C", "label": "C — کم‌ارزش"},
                ]},
                {"name": "lead_time_days", "label": "زمان تأمین (روز)", "type": "number", "min": 0},
                {"name": "shelf_life_days", "label": "عمر مفید (روز)", "type": "number", "min": 0},
            ],
        },
        {
            "id": "flags",
            "title": "قابلیت‌ها",
            "fields": [
                {"name": "is_purchasable", "label": "قابل خرید", "type": "checkbox", "default": True},
                {"name": "is_sellable", "label": "قابل فروش", "type": "checkbox", "default": True},
                {"name": "is_stockable", "label": "قابل انبارش", "type": "checkbox", "default": True},
                {"name": "is_producible", "label": "قابل تولید", "type": "checkbox"},
            ],
        },
        {
            "id": "defaults",
            "title": "پیش‌فرض‌ها",
            "fields": [
                {"name": "default_warehouse", "label": "انبار پیش‌فرض", "type": "lookup", "lookup_endpoint": "/api/v1/inventory/warehouses/"},
                {"name": "company_id", "label": "شرکت مالک", "type": "lookup", "lookup_endpoint": "/api/v1/organization/companies/"},
            ],
        },
    ],
}

ITEM_GROUP_FORM = {
    "id": "inv_item_group_form",
    "title": "فرم گروه کالا",
    "sections": [
        {
            "id": "main",
            "title": "اطلاعات گروه",
            "fields": [
                {"name": "code", "label": "کد گروه", "type": "text", "required": True, "max_length": 50},
                {"name": "name", "label": "نام گروه", "type": "text", "required": True, "max_length": 200},
                {"name": "parent", "label": "گروه مادر", "type": "lookup", "lookup_endpoint": "/api/v1/inventory/item-groups/"},
                {"name": "default_costing_method", "label": "روش قیمت‌گذاری پیش‌فرض", "type": "lookup", "lookup_endpoint": "/api/v1/inventory/costing-methods/"},
                {"name": "is_active", "label": "فعال", "type": "checkbox", "default": True},
            ],
        },
    ],
}

UNIT_OF_MEASURE_FORM = {
    "id": "inv_unit_of_measure_form",
    "title": "فرم واحد اندازه‌گیری",
    "sections": [
        {
            "id": "main",
            "title": "اطلاعات واحد",
            "fields": [
                {"name": "code", "label": "کد واحد", "type": "text", "required": True, "max_length": 20},
                {"name": "name", "label": "نام", "type": "text", "required": True, "max_length": 100},
                {"name": "name_fa", "label": "نام فارسی", "type": "text", "max_length": 100},
                {"name": "uom_type", "label": "نوع", "type": "select", "required": True, "options": [
                    {"value": "WEIGHT", "label": "وزن"},
                    {"value": "LENGTH", "label": "طول"},
                    {"value": "VOLUME", "label": "حجم"},
                    {"value": "AREA", "label": "سطح"},
                    {"value": "COUNT", "label": "تعداد"},
                    {"value": "PACK", "label": "بسته"},
                ]},
                {"name": "decimal_places", "label": "تعداد اعشار", "type": "number", "min": 0, "max": 6, "default": 2},
                {"name": "is_active", "label": "فعال", "type": "checkbox", "default": True},
            ],
        },
    ],
}

WAREHOUSE_FORM = {
    "id": "inv_warehouse_form",
    "title": "فرم انبار",
    "sections": [
        {
            "id": "basic",
            "title": "اطلاعات پایه",
            "fields": [
                {"name": "warehouse_code", "label": "کد انبار", "type": "text", "required": True, "max_length": 50},
                {"name": "warehouse_name", "label": "نام انبار", "type": "text", "required": True, "max_length": 200},
                {"name": "warehouse_type", "label": "نوع انبار", "type": "select", "required": True, "options": [
                    {"value": "MAIN", "label": "اصلی"},
                    {"value": "TEMPORARY", "label": "موقت"},
                    {"value": "TRANSIT", "label": "ترانزیت"},
                    {"value": "QUARANTINE", "label": "قرنطینه"},
                ]},
                {"name": "company_id", "label": "شرکت", "type": "lookup", "lookup_endpoint": "/api/v1/organization/companies/"},
                {"name": "manager", "label": "مدیر انبار", "type": "lookup", "lookup_endpoint": "/api/v1/auth/users/"},
                {"name": "allow_negative_stock", "label": "اجازه موجودی منفی", "type": "checkbox"},
                {"name": "is_active", "label": "فعال", "type": "checkbox", "default": True},
            ],
        },
        {
            "id": "address",
            "title": "آدرس",
            "fields": [
                {"name": "address", "label": "آدرس", "type": "textarea"},
                {"name": "city", "label": "شهر", "type": "text"},
                {"name": "province", "label": "استان", "type": "text"},
                {"name": "country", "label": "کشور", "type": "text"},
                {"name": "postal_code", "label": "کد پستی", "type": "text"},
                {"name": "phone", "label": "تلفن", "type": "tel"},
                {"name": "email", "label": "ایمیل", "type": "email"},
            ],
        },
    ],
}

STORAGE_LOCATION_FORM = {
    "id": "inv_storage_location_form",
    "title": "فرم مکان انبار",
    "sections": [
        {
            "id": "main",
            "title": "اطلاعات مکان",
            "fields": [
                {"name": "location_code", "label": "کد مکان", "type": "text", "required": True, "max_length": 50},
                {"name": "location_name", "label": "نام مکان", "type": "text", "required": True, "max_length": 200},
                {"name": "warehouse", "label": "انبار", "type": "lookup", "required": True, "lookup_endpoint": "/api/v1/inventory/warehouses/"},
                {"name": "parent_location", "label": "مکان مادر", "type": "lookup", "lookup_endpoint": "/api/v1/inventory/storage-locations/"},
                {"name": "location_type", "label": "نوع مکان", "type": "select", "required": True, "options": [
                    {"value": "ZONE", "label": "ناحیه"},
                    {"value": "AISLE", "label": "راهرو"},
                    {"value": "RACK", "label": "قفسه"},
                    {"value": "SHELF", "label": "طبقه"},
                    {"value": "BIN", "label": "سلول"},
                ]},
                {"name": "is_picking", "label": "مکان برداشت", "type": "checkbox"},
                {"name": "is_putaway", "label": "مکان چینش", "type": "checkbox"},
                {"name": "max_weight_kg", "label": "حداکثر وزن (kg)", "type": "number", "min": 0},
                {"name": "max_volume_m3", "label": "حداکثر حجم (m³)", "type": "number", "min": 0},
                {"name": "temperature_c", "label": "دما (°C)", "type": "number"},
                {"name": "is_hazardous", "label": "ناحیه خطرناک", "type": "checkbox"},
                {"name": "is_active", "label": "فعال", "type": "checkbox", "default": True},
            ],
        },
    ],
}

BATCH_FORM = {
    "id": "inv_batch_form",
    "title": "فرم بچ",
    "sections": [
        {
            "id": "main",
            "title": "اطلاعات بچ",
            "fields": [
                {"name": "batch_number", "label": "شماره بچ", "type": "text", "required": True, "max_length": 100},
                {"name": "item", "label": "کالا", "type": "lookup", "required": True, "lookup_endpoint": "/api/v1/inventory/items/"},
                {"name": "manufacturing_date", "label": "تاریخ تولید", "type": "date_jalali"},
                {"name": "expiry_date", "label": "تاریخ انقضا", "type": "date_jalali"},
                {"name": "supplier_batch_number", "label": "شماره بچ تأمین‌کننده", "type": "text"},
                {"name": "supplier_id", "label": "تأمین‌کننده", "type": "lookup", "lookup_endpoint": "/api/v1/organization/business-partners/"},
                {"name": "batch_status", "label": "وضعیت بچ", "type": "select", "options": [
                    {"value": "AVAILABLE", "label": "موجود"},
                    {"value": "RESTRICTED", "label": "محدود"},
                    {"value": "BLOCKED", "label": "مسدود"},
                    {"value": "EXPIRED", "label": "منقضی"},
                ]},
                {"name": "quality_status", "label": "وضعیت کیفی", "type": "select", "options": [
                    {"value": "PENDING", "label": "در انتظار"},
                    {"value": "APPROVED", "label": "تأیید"},
                    {"value": "REJECTED", "label": "رد"},
                    {"value": "CONDITIONAL", "label": "مشروط"},
                ]},
            ],
        },
    ],
}

COSTING_METHOD_FORM = {
    "id": "inv_costing_method_form",
    "title": "فرم روش قیمت‌گذاری",
    "sections": [
        {
            "id": "main",
            "title": "اطلاعات روش",
            "fields": [
                {"name": "code", "label": "کد", "type": "text", "required": True, "max_length": 20},
                {"name": "name", "label": "نام", "type": "text", "required": True, "max_length": 100},
                {"name": "description", "label": "توضیحات", "type": "textarea"},
                {"name": "is_active", "label": "فعال", "type": "checkbox", "default": True},
            ],
        },
    ],
}

STOCK_STATUS_FORM = {
    "id": "inv_stock_status_form",
    "title": "فرم وضعیت موجودی",
    "sections": [
        {
            "id": "main",
            "title": "اطلاعات وضعیت",
            "fields": [
                {"name": "status_code", "label": "کد وضعیت", "type": "text", "required": True, "max_length": 20},
                {"name": "status_name", "label": "نام وضعیت", "type": "text", "required": True, "max_length": 100},
                {"name": "status_type", "label": "نوع", "type": "select", "required": True, "options": [
                    {"value": "UNRESTRICTED", "label": "آزاد"},
                    {"value": "QUALITY_INSPECTION", "label": "بازرسی کیفی"},
                    {"value": "BLOCKED", "label": "مسدود"},
                    {"value": "IN_TRANSIT", "label": "در حال انتقال"},
                    {"value": "RESERVED", "label": "رزرو"},
                    {"value": "DAMAGED", "label": "آسیب‌دیده"},
                    {"value": "RETURN", "label": "مرجوعی"},
                    {"value": "SCRAP", "label": "ضایعات"},
                    {"value": "CUSTOM", "label": "سفارشی"},
                ]},
                {"name": "is_saleable", "label": "قابل فروش", "type": "checkbox"},
                {"name": "is_producible", "label": "قابل تولید", "type": "checkbox"},
                {"name": "is_blocked_for_movement", "label": "مسدود برای جابجایی", "type": "checkbox"},
                {"name": "sort_order", "label": "ترتیب نمایش", "type": "number", "min": 0, "default": 0},
                {"name": "is_active", "label": "فعال", "type": "checkbox", "default": True},
            ],
        },
    ],
}

PHYSICAL_INVENTORY_FORM = {
    "id": "inv_physical_inventory_form",
    "title": "فرم شمارش فیزیکی",
    "sections": [
        {
            "id": "main",
            "title": "اطلاعات شمارش",
            "fields": [
                {"name": "count_number", "label": "شماره شمارش", "type": "text", "required": True, "max_length": 50},
                {"name": "count_date", "label": "تاریخ شمارش", "type": "date_jalali", "required": True},
                {"name": "count_type", "label": "نوع شمارش", "type": "select", "required": True, "options": [
                    {"value": "FULL", "label": "کامل"},
                    {"value": "PARTIAL", "label": "جزئی"},
                    {"value": "CYCLE", "label": "دوره‌ای"},
                ]},
                {"name": "warehouse", "label": "انبار", "type": "lookup", "required": True, "lookup_endpoint": "/api/v1/inventory/warehouses/"},
                {"name": "location", "label": "مکان", "type": "lookup", "lookup_endpoint": "/api/v1/inventory/storage-locations/"},
                {"name": "item_group", "label": "گروه کالا", "type": "lookup", "lookup_endpoint": "/api/v1/inventory/item-groups/"},
                {"name": "abc_filter", "label": "فیلتر ABC", "type": "select", "options": [
                    {"value": "", "label": "همه"},
                    {"value": "A", "label": "A"},
                    {"value": "B", "label": "B"},
                    {"value": "C", "label": "C"},
                ]},
                {"name": "blind_count", "label": "شمارش کور", "type": "checkbox"},
                {"name": "freeze_stock", "label": "فریز موجودی", "type": "checkbox"},
                {"name": "max_count_rounds", "label": "تعداد دفعات شمارش", "type": "number", "min": 1, "max": 3, "default": 1},
                {"name": "variance_threshold_pct", "label": "آستانه انحراف (%)", "type": "number", "min": 0, "default": 5},
                {"name": "responsible", "label": "مسئول", "type": "lookup", "lookup_endpoint": "/api/v1/auth/users/"},
                {"name": "notes", "label": "توضیحات", "type": "textarea"},
            ],
        },
    ],
}

INSPECTION_LOT_FORM = {
    "id": "inv_inspection_lot_form",
    "title": "فرم لات بازرسی",
    "sections": [
        {
            "id": "main",
            "title": "اطلاعات بازرسی",
            "fields": [
                {"name": "lot_number", "label": "شماره لات", "type": "text", "required": True, "max_length": 50},
                {"name": "inspection_type", "label": "نوع بازرسی", "type": "select", "required": True, "options": [
                    {"value": "INCOMING", "label": "ورودی"},
                    {"value": "IN_PROCESS", "label": "حین فرآیند"},
                    {"value": "FINAL", "label": "نهایی"},
                ]},
                {"name": "inspection_date", "label": "تاریخ بازرسی", "type": "date_jalali", "required": True},
                {"name": "item", "label": "کالا", "type": "lookup", "required": True, "lookup_endpoint": "/api/v1/inventory/items/"},
                {"name": "batch", "label": "بچ", "type": "lookup", "lookup_endpoint": "/api/v1/inventory/batches/"},
                {"name": "warehouse", "label": "انبار", "type": "lookup", "lookup_endpoint": "/api/v1/inventory/warehouses/"},
                {"name": "inspection_qty", "label": "مقدار بازرسی", "type": "number", "required": True, "min": 0},
                {"name": "sample_size", "label": "حجم نمونه", "type": "number", "min": 0},
                {"name": "unit", "label": "واحد", "type": "lookup", "lookup_endpoint": "/api/v1/inventory/units/"},
                {"name": "inspector", "label": "بازرس", "type": "lookup", "lookup_endpoint": "/api/v1/auth/users/"},
                {"name": "notes", "label": "توضیحات", "type": "textarea"},
            ],
        },
    ],
}

RESERVATION_FORM = {
    "id": "inv_reservation_form",
    "title": "فرم رزرو موجودی",
    "sections": [
        {
            "id": "main",
            "title": "اطلاعات رزرو",
            "fields": [
                {"name": "reservation_number", "label": "شماره رزرو", "type": "text", "required": True, "max_length": 50},
                {"name": "reservation_date", "label": "تاریخ رزرو", "type": "date_jalali", "required": True},
                {"name": "item", "label": "کالا", "type": "lookup", "required": True, "lookup_endpoint": "/api/v1/inventory/items/"},
                {"name": "warehouse", "label": "انبار", "type": "lookup", "required": True, "lookup_endpoint": "/api/v1/inventory/warehouses/"},
                {"name": "location", "label": "مکان", "type": "lookup", "lookup_endpoint": "/api/v1/inventory/storage-locations/"},
                {"name": "batch", "label": "بچ", "type": "lookup", "lookup_endpoint": "/api/v1/inventory/batches/"},
                {"name": "reserved_qty", "label": "مقدار رزرو", "type": "number", "required": True, "min": 0},
                {"name": "unit", "label": "واحد", "type": "lookup", "lookup_endpoint": "/api/v1/inventory/units/"},
                {"name": "priority", "label": "اولویت", "type": "number", "min": 1, "max": 99, "default": 50},
                {"name": "expiry_date", "label": "تاریخ انقضای رزرو", "type": "date_jalali"},
                {"name": "required_by_date", "label": "نیاز تا تاریخ", "type": "date_jalali"},
                {"name": "source_document_type", "label": "نوع سند", "type": "text"},
                {"name": "source_document_id", "label": "سند مبدأ", "type": "text"},
                {"name": "notes", "label": "توضیحات", "type": "textarea"},
            ],
        },
    ],
}
