"""
Form Schemas — CLM Module.

اسکیماهای فرم برای ماژول مدیریت قراردادها.
"""

CONTRACT_FORM = {
    "id": "clm_contract_form",
    "title": "فرم اطلاعات قرارداد",
    "endpoint": "/api/v1/clm/contracts/",
    "sections": [
        {
            "id": "basic",
            "title": "اطلاعات اصلی",
            "fields": [
                {"name": "contract_number", "label": "شماره قرارداد", "type": "text", "max_length": 50,
                 "description": "در صورت خالی بودن، به صورت خودکار تولید می‌شود"},
                {"name": "title", "label": "عنوان قرارداد", "type": "text", "required": True, "max_length": 300},
                {"name": "description", "label": "شرح قرارداد", "type": "textarea"},
                {"name": "category", "label": "دسته‌بندی", "type": "select", "required": True, "options": [
                    {"value": "COMMERCIAL", "label": "تجاری"},
                    {"value": "PROJECT", "label": "پروژه‌ای"},
                    {"value": "EMPLOYMENT", "label": "استخدامی"},
                    {"value": "LEASE", "label": "اجاره"},
                ]},
                {"name": "contract_type", "label": "نوع قرارداد", "type": "select", "required": True,
                 "depends_on": "category", "options_map": {
                    "COMMERCIAL": [
                        {"value": "COMMERCIAL_PURCHASE", "label": "خرید"},
                        {"value": "COMMERCIAL_SALE", "label": "فروش"},
                        {"value": "COMMERCIAL_SERVICE", "label": "خدمات"},
                        {"value": "COMMERCIAL_PARTNERSHIP", "label": "مشارکت"},
                    ],
                    "PROJECT": [
                        {"value": "PROJECT_EPC", "label": "EPC"},
                        {"value": "PROJECT_CONTRACTOR", "label": "پیمانکاری"},
                        {"value": "PROJECT_CONSULTANCY", "label": "مشاوره پروژه"},
                    ],
                    "EMPLOYMENT": [
                        {"value": "EMPLOYMENT_PERMANENT", "label": "استخدام دائم"},
                        {"value": "EMPLOYMENT_TEMPORARY", "label": "استخدام موقت"},
                        {"value": "EMPLOYMENT_CONSULTANCY", "label": "مشاوره"},
                    ],
                    "LEASE": [
                        {"value": "LEASE_PROPERTY", "label": "اجاره ملک"},
                        {"value": "LEASE_EQUIPMENT", "label": "اجاره تجهیزات"},
                        {"value": "LEASE_VEHICLE", "label": "اجاره خودرو"},
                    ],
                }},
                {"name": "priority", "label": "اولویت", "type": "select", "default": "NORMAL", "options": [
                    {"value": "LOW", "label": "کم"},
                    {"value": "NORMAL", "label": "معمولی"},
                    {"value": "HIGH", "label": "بالا"},
                    {"value": "CRITICAL", "label": "بحرانی"},
                ]},
                {"name": "reference_number", "label": "شماره مرجع", "type": "text", "max_length": 100},
                {"name": "tags", "label": "برچسب‌ها", "type": "tags"},
            ],
        },
        {
            "id": "dates",
            "title": "تاریخ‌ها",
            "fields": [
                {"name": "signing_date", "label": "تاریخ امضا", "type": "date_jalali"},
                {"name": "start_date", "label": "تاریخ شروع", "type": "date_jalali", "required": True},
                {"name": "end_date", "label": "تاریخ پایان", "type": "date_jalali", "required": True},
                {"name": "effective_date", "label": "تاریخ اجرا", "type": "date_jalali"},
                {"name": "expiry_date", "label": "تاریخ انقضا", "type": "date_jalali"},
            ],
        },
        {
            "id": "financial",
            "title": "اطلاعات مالی",
            "fields": [
                {"name": "total_value", "label": "ارزش کل قرارداد", "type": "currency", "required": True},
                {"name": "currency_id", "label": "واحد پول", "type": "lookup",
                 "lookup_endpoint": "/api/platform/currencies/"},
                {"name": "payment_terms_days", "label": "مهلت پرداخت (روز)", "type": "number", "min": 0},
                {"name": "payment_terms_description", "label": "شرایط پرداخت", "type": "textarea"},
                {"name": "advance_payment_percent", "label": "درصد پیش‌پرداخت", "type": "number",
                 "min": 0, "max": 100, "step": 0.1},
                {"name": "retention_percent", "label": "درصد سپرده حسن انجام", "type": "number",
                 "min": 0, "max": 100, "step": 0.1},
                {"name": "penalty_rate_per_day", "label": "نرخ جریمه تأخیر روزانه", "type": "number",
                 "min": 0, "step": 0.0001},
            ],
        },
        {
            "id": "guarantee",
            "title": "ضمانت‌نامه و تضمین",
            "fields": [
                {"name": "guarantee_amount", "label": "مبلغ ضمانت‌نامه", "type": "currency"},
                {"name": "guarantee_type", "label": "نوع ضمانت‌نامه", "type": "select", "options": [
                    {"value": "BANK_GUARANTEE", "label": "ضمانت‌نامه بانکی"},
                    {"value": "CASH_DEPOSIT", "label": "سپرده نقدی"},
                    {"value": "PROMISSORY_NOTE", "label": "سفته"},
                    {"value": "CHECK", "label": "چک"},
                    {"value": "OTHER", "label": "سایر"},
                ]},
                {"name": "guarantee_expiry_date", "label": "تاریخ انقضای ضمانت‌نامه", "type": "date_jalali"},
                {"name": "performance_bond_amount", "label": "مبلغ ضمانت حسن انجام", "type": "currency"},
                {"name": "performance_bond_expiry_date", "label": "تاریخ انقضای ضمانت حسن انجام",
                 "type": "date_jalali"},
            ],
        },
        {
            "id": "renewal",
            "title": "تنظیمات تمدید",
            "fields": [
                {"name": "auto_renew", "label": "تمدید خودکار", "type": "switch", "default": False},
                {"name": "renewal_period_days", "label": "دوره تمدید (روز)", "type": "number", "min": 1},
                {"name": "renewal_notice_days", "label": "هشدار قبل از تمدید (روز)", "type": "number", "min": 1},
                {"name": "max_renewals", "label": "حداکثر تمدید", "type": "number", "min": 0, "default": 0,
                 "description": "۰ = بدون محدودیت"},
            ],
        },
        {
            "id": "relations",
            "title": "ارتباطات",
            "fields": [
                {"name": "template", "label": "قالب", "type": "lookup",
                 "lookup_endpoint": "/api/v1/clm/templates/"},
                {"name": "parent_contract", "label": "قرارداد مادر", "type": "lookup",
                 "lookup_endpoint": "/api/v1/clm/contracts/"},
                {"name": "project_id", "label": "پروژه", "type": "lookup",
                 "lookup_endpoint": "/api/v1/pm/projects/"},
                {"name": "org_unit_id", "label": "واحد سازمانی", "type": "lookup",
                 "lookup_endpoint": "/api/platform/org-units/"},
                {"name": "legal_entity_id", "label": "شخصیت حقوقی", "type": "lookup",
                 "lookup_endpoint": "/api/hrm/v1/legal-entities/"},
                {"name": "responsible_person_id", "label": "مسئول قرارداد", "type": "lookup",
                 "lookup_endpoint": "/api/hrm/v1/employees/"},
                {"name": "employee_id", "label": "کارمند (قرارداد استخدامی)", "type": "lookup",
                 "lookup_endpoint": "/api/hrm/v1/employees/",
                 "visible_when": {"field": "category", "operator": "equals", "value": "EMPLOYMENT"}},
            ],
        },
        {
            "id": "extra",
            "title": "اطلاعات تکمیلی",
            "fields": [
                {"name": "is_confidential", "label": "محرمانه", "type": "switch", "default": False},
                {"name": "notes", "label": "یادداشت‌ها", "type": "textarea"},
            ],
        },
    ],
}


CONTRACT_PARTY_FORM = {
    "id": "clm_contract_party_form",
    "title": "فرم طرف قرارداد",
    "endpoint": "/api/v1/clm/parties/",
    "sections": [
        {
            "id": "main",
            "title": "اطلاعات طرف",
            "fields": [
                {"name": "party_role", "label": "نقش", "type": "select", "required": True, "options": [
                    {"value": "FIRST_PARTY", "label": "طرف اول (کارفرما)"},
                    {"value": "SECOND_PARTY", "label": "طرف دوم (پیمانکار/فروشنده)"},
                    {"value": "THIRD_PARTY", "label": "طرف سوم"},
                    {"value": "GUARANTOR", "label": "ضامن"},
                    {"value": "WITNESS", "label": "شاهد"},
                    {"value": "CONSULTANT", "label": "مشاور"},
                    {"value": "EMPLOYER", "label": "کارفرما"},
                    {"value": "EMPLOYEE_PARTY", "label": "کارمند"},
                    {"value": "LANDLORD", "label": "موجر"},
                    {"value": "TENANT_PARTY", "label": "مستأجر"},
                ]},
                {"name": "business_partner_id", "label": "شریک تجاری", "type": "lookup",
                 "lookup_endpoint": "/api/platform/business-partners/"},
                {"name": "legal_entity_id", "label": "شخصیت حقوقی", "type": "lookup",
                 "lookup_endpoint": "/api/hrm/v1/legal-entities/"},
                {"name": "is_primary", "label": "طرف اصلی", "type": "switch", "default": False},
                {"name": "is_lead", "label": "طرف پیشرو (در کنسرسیوم)", "type": "switch", "default": False},
                {"name": "share_percent", "label": "درصد سهم", "type": "number", "min": 0, "max": 100},
            ],
        },
        {
            "id": "signer",
            "title": "اطلاعات امضاکننده",
            "fields": [
                {"name": "signer_name", "label": "نام امضاکننده", "type": "text"},
                {"name": "signer_title", "label": "سمت امضاکننده", "type": "text"},
                {"name": "signer_national_code", "label": "کد ملی امضاکننده", "type": "text"},
                {"name": "signing_authority", "label": "اختیار امضا", "type": "textarea"},
            ],
        },
        {
            "id": "contact",
            "title": "اطلاعات تماس",
            "fields": [
                {"name": "contact_name", "label": "نام رابط", "type": "text"},
                {"name": "contact_phone", "label": "تلفن رابط", "type": "tel"},
                {"name": "contact_email", "label": "ایمیل رابط", "type": "email"},
            ],
        },
    ],
}


CONTRACT_CLAUSE_FORM = {
    "id": "clm_contract_clause_form",
    "title": "فرم بند قرارداد",
    "endpoint": "/api/v1/clm/clauses/",
    "sections": [
        {
            "id": "main",
            "title": "اطلاعات بند",
            "fields": [
                {"name": "clause_number", "label": "شماره بند", "type": "text", "required": True},
                {"name": "title", "label": "عنوان", "type": "text", "required": True},
                {"name": "content", "label": "متن بند", "type": "richtext", "required": True},
                {"name": "clause_type", "label": "نوع بند", "type": "select", "required": True, "options": [
                    {"value": "GENERAL", "label": "عمومی"},
                    {"value": "FINANCIAL", "label": "مالی"},
                    {"value": "PENALTY", "label": "جریمه"},
                    {"value": "TERMINATION", "label": "فسخ"},
                    {"value": "CONFIDENTIALITY", "label": "محرمانگی"},
                    {"value": "FORCE_MAJEURE", "label": "فورس ماژور"},
                    {"value": "DISPUTE_RESOLUTION", "label": "حل اختلاف"},
                    {"value": "WARRANTY", "label": "ضمانت"},
                    {"value": "INSURANCE", "label": "بیمه"},
                    {"value": "DELIVERY", "label": "تحویل"},
                    {"value": "SCOPE", "label": "محدوده"},
                    {"value": "CUSTOM", "label": "سفارشی"},
                ]},
                {"name": "is_mandatory", "label": "اجباری", "type": "switch", "default": True},
                {"name": "is_negotiable", "label": "قابل مذاکره", "type": "switch", "default": False},
                {"name": "parent_clause", "label": "بند مادر", "type": "lookup",
                 "lookup_endpoint": "/api/v1/clm/clauses/", "description": "برای زیربندها"},
                {"name": "order", "label": "ترتیب", "type": "number", "min": 0},
            ],
        },
    ],
}


CONTRACT_MILESTONE_FORM = {
    "id": "clm_contract_milestone_form",
    "title": "فرم مرحله قرارداد",
    "endpoint": "/api/v1/clm/milestones/",
    "sections": [
        {
            "id": "main",
            "title": "اطلاعات مرحله",
            "fields": [
                {"name": "title", "label": "عنوان", "type": "text", "required": True},
                {"name": "description", "label": "شرح", "type": "textarea"},
                {"name": "milestone_type", "label": "نوع مرحله", "type": "select", "required": True, "options": [
                    {"value": "PAYMENT", "label": "پرداخت"},
                    {"value": "DELIVERY", "label": "تحویل"},
                    {"value": "PHASE_COMPLETION", "label": "اتمام فاز"},
                    {"value": "INSPECTION", "label": "بازرسی"},
                    {"value": "APPROVAL", "label": "تأیید"},
                    {"value": "CUSTOM", "label": "سفارشی"},
                ]},
                {"name": "planned_date", "label": "تاریخ برنامه‌ریزی", "type": "date_jalali", "required": True},
                {"name": "due_date", "label": "مهلت", "type": "date_jalali"},
                {"name": "order", "label": "ترتیب", "type": "number", "min": 0},
            ],
        },
        {
            "id": "financial",
            "title": "اطلاعات مالی",
            "fields": [
                {"name": "amount", "label": "مبلغ", "type": "currency"},
                {"name": "has_penalty", "label": "دارای جریمه تأخیر", "type": "switch", "default": False},
                {"name": "penalty_amount_per_day", "label": "مبلغ جریمه روزانه", "type": "currency",
                 "visible_when": {"field": "has_penalty", "operator": "equals", "value": True}},
            ],
        },
        {
            "id": "deliverable",
            "title": "تحویل‌دادنی‌ها",
            "fields": [
                {"name": "deliverable_description", "label": "شرح تحویل‌دادنی", "type": "textarea"},
                {"name": "acceptance_criteria", "label": "معیار پذیرش", "type": "textarea"},
            ],
        },
    ],
}


CONTRACT_AMENDMENT_FORM = {
    "id": "clm_contract_amendment_form",
    "title": "فرم الحاقیه",
    "endpoint": "/api/v1/clm/amendments/",
    "sections": [
        {
            "id": "main",
            "title": "اطلاعات الحاقیه",
            "fields": [
                {"name": "title", "label": "عنوان الحاقیه", "type": "text", "required": True},
                {"name": "description", "label": "شرح", "type": "textarea"},
                {"name": "reason", "label": "دلیل", "type": "textarea", "required": True},
                {"name": "amendment_type", "label": "نوع تغییر", "type": "select", "required": True, "options": [
                    {"value": "VALUE_CHANGE", "label": "تغییر مبلغ"},
                    {"value": "DURATION_CHANGE", "label": "تغییر مدت"},
                    {"value": "SCOPE_CHANGE", "label": "تغییر محدوده"},
                    {"value": "PARTY_CHANGE", "label": "تغییر طرفین"},
                    {"value": "CLAUSE_CHANGE", "label": "تغییر بندها"},
                    {"value": "COMBINED", "label": "ترکیبی"},
                    {"value": "OTHER", "label": "سایر"},
                ]},
                {"name": "effective_date", "label": "تاریخ اجرا", "type": "date_jalali"},
            ],
        },
        {
            "id": "changes",
            "title": "تغییرات",
            "fields": [
                {"name": "new_total_value", "label": "مبلغ جدید قرارداد", "type": "currency"},
                {"name": "new_end_date", "label": "تاریخ پایان جدید", "type": "date_jalali"},
                {"name": "notes", "label": "یادداشت‌ها", "type": "textarea"},
            ],
        },
    ],
}


CONTRACT_TEMPLATE_FORM = {
    "id": "clm_contract_template_form",
    "title": "فرم قالب قرارداد",
    "endpoint": "/api/v1/clm/templates/",
    "sections": [
        {
            "id": "main",
            "title": "اطلاعات قالب",
            "fields": [
                {"name": "name", "label": "نام قالب", "type": "text", "required": True},
                {"name": "name_en", "label": "نام قالب (انگلیسی)", "type": "text"},
                {"name": "description", "label": "شرح", "type": "textarea"},
                {"name": "category", "label": "دسته‌بندی", "type": "select", "required": True, "options": [
                    {"value": "COMMERCIAL", "label": "تجاری"},
                    {"value": "PROJECT", "label": "پروژه‌ای"},
                    {"value": "EMPLOYMENT", "label": "استخدامی"},
                    {"value": "LEASE", "label": "اجاره"},
                ]},
                {"name": "contract_type", "label": "نوع قرارداد", "type": "select"},
                {"name": "is_active", "label": "فعال", "type": "switch", "default": True},
                {"name": "is_default", "label": "پیش‌فرض", "type": "switch", "default": False},
            ],
        },
        {
            "id": "defaults",
            "title": "مقادیر پیش‌فرض",
            "fields": [
                {"name": "numbering_prefix", "label": "پیشوند شماره‌گذاری", "type": "text"},
                {"name": "numbering_pattern", "label": "الگوی شماره‌گذاری", "type": "text"},
                {"name": "default_payment_terms_days", "label": "مهلت پرداخت پیش‌فرض (روز)", "type": "number"},
                {"name": "default_advance_payment_percent", "label": "درصد پیش‌پرداخت", "type": "number"},
                {"name": "default_retention_percent", "label": "درصد سپرده", "type": "number"},
                {"name": "default_penalty_rate_per_day", "label": "نرخ جریمه روزانه", "type": "number"},
            ],
        },
        {
            "id": "clauses",
            "title": "بندهای پیش‌فرض",
            "fields": [
                {"name": "default_clauses", "label": "بندهای پیش‌فرض", "type": "json_editor",
                 "description": "لیست بندهای پیش‌فرض به فرمت JSON"},
            ],
        },
        {
            "id": "milestones",
            "title": "مراحل پیش‌فرض",
            "fields": [
                {"name": "default_milestones", "label": "مراحل پیش‌فرض", "type": "json_editor",
                 "description": "لیست مراحل پیش‌فرض به فرمت JSON"},
            ],
        },
    ],
}
