"""
CLM Module — Settings Schema Registration.

تعریف و ثبت schema تنظیمات ماژول مدیریت قراردادها.
هنگام بارگذاری ماژول (AppConfig.ready) این فایل ایمپورت می‌شود.
"""
from apps.core.module_settings.domain import (
    SettingsFieldDefinition,
    SettingsSchemaDefinition,
    SettingsSectionDefinition,
)
from apps.core.module_settings.schema_registry import settings_schema_registry


# ─── General Section ──────────────────────────────────────────

general_section = SettingsSectionDefinition(
    key="general",
    label="تنظیمات عمومی",
    label_en="General Settings",
    description="تنظیمات پیش‌فرض ماژول مدیریت قراردادها",
    icon="HiOutlineDocumentText",
    order=1,
    fields=(
        SettingsFieldDefinition(
            key="auto_generate_contract_number",
            field_type="bool",
            label="تولید خودکار شماره قرارداد",
            label_en="Auto-generate Contract Number",
            default_value=True,
        ),
        SettingsFieldDefinition(
            key="contract_number_prefix",
            field_type="str",
            label="پیشوند شماره قرارداد",
            label_en="Contract Number Prefix",
            default_value="CNT",
            description="پیشوند استفاده‌شده در تولید خودکار شماره قرارداد",
        ),
        SettingsFieldDefinition(
            key="contract_number_pattern",
            field_type="str",
            label="الگوی شماره‌گذاری",
            label_en="Contract Number Pattern",
            default_value="{prefix}-{year}-{seq:04d}",
            description="الگوی شماره‌گذاری — متغیرها: prefix, year, seq",
        ),
        SettingsFieldDefinition(
            key="default_currency",
            field_type="str",
            label="واحد پول پیش‌فرض",
            label_en="Default Currency",
            default_value="IRR",
        ),
        SettingsFieldDefinition(
            key="default_priority",
            field_type="select",
            label="اولویت پیش‌فرض",
            label_en="Default Priority",
            default_value="NORMAL",
            options=[
                {"value": "LOW", "label": "کم"},
                {"value": "NORMAL", "label": "معمولی"},
                {"value": "HIGH", "label": "بالا"},
                {"value": "CRITICAL", "label": "بحرانی"},
            ],
        ),
    ),
)


# ─── Approval Section ────────────────────────────────────────

approval_section = SettingsSectionDefinition(
    key="approval",
    label="تنظیمات تأیید",
    label_en="Approval Settings",
    description="تنظیمات فرآیند تأیید قراردادها",
    icon="HiOutlineCheckCircle",
    order=2,
    fields=(
        SettingsFieldDefinition(
            key="require_approval",
            field_type="bool",
            label="الزام تأیید",
            label_en="Require Approval",
            default_value=True,
            description="آیا قراردادها نیاز به تأیید دارند؟",
        ),
        SettingsFieldDefinition(
            key="approval_levels",
            field_type="int",
            label="تعداد سطوح تأیید",
            label_en="Approval Levels",
            default_value=1,
            min_value=1,
            max_value=5,
        ),
        SettingsFieldDefinition(
            key="auto_activate_on_approval",
            field_type="bool",
            label="فعال‌سازی خودکار پس از تأیید",
            label_en="Auto-activate on Approval",
            default_value=False,
        ),
    ),
)


# ─── Financial Section ───────────────────────────────────────

financial_section = SettingsSectionDefinition(
    key="financial",
    label="تنظیمات مالی",
    label_en="Financial Settings",
    description="تنظیمات مالی قراردادها",
    icon="HiOutlineBanknotes",
    order=3,
    fields=(
        SettingsFieldDefinition(
            key="default_payment_terms_days",
            field_type="int",
            label="مهلت پرداخت پیش‌فرض (روز)",
            label_en="Default Payment Terms (days)",
            default_value=30,
            min_value=0,
            max_value=365,
        ),
        SettingsFieldDefinition(
            key="default_advance_payment_percent",
            field_type="int",
            label="درصد پیش‌پرداخت پیش‌فرض",
            label_en="Default Advance Payment %",
            default_value=0,
            min_value=0,
            max_value=100,
        ),
        SettingsFieldDefinition(
            key="default_retention_percent",
            field_type="int",
            label="درصد سپرده حسن انجام پیش‌فرض",
            label_en="Default Retention %",
            default_value=10,
            min_value=0,
            max_value=100,
        ),
        SettingsFieldDefinition(
            key="default_penalty_rate_per_day",
            field_type="str",
            label="نرخ جریمه تأخیر روزانه پیش‌فرض",
            label_en="Default Penalty Rate Per Day",
            default_value="0.001",
            description="نرخ جریمه به صورت اعشاری (مثلاً 0.001 = یک هزارم مبلغ کل)",
        ),
    ),
)


# ─── Renewal Section ─────────────────────────────────────────

renewal_section = SettingsSectionDefinition(
    key="renewal",
    label="تنظیمات تمدید",
    label_en="Renewal Settings",
    description="تنظیمات تمدید قراردادها",
    icon="HiOutlineArrowPath",
    order=4,
    fields=(
        SettingsFieldDefinition(
            key="enable_auto_renew",
            field_type="bool",
            label="فعال‌سازی تمدید خودکار",
            label_en="Enable Auto-Renew",
            default_value=False,
        ),
        SettingsFieldDefinition(
            key="default_renewal_notice_days",
            field_type="int",
            label="روزهای هشدار قبل از انقضا",
            label_en="Renewal Notice Days",
            default_value=30,
            min_value=7,
            max_value=180,
        ),
        SettingsFieldDefinition(
            key="default_max_renewals",
            field_type="int",
            label="حداکثر تمدید",
            label_en="Max Renewals",
            default_value=3,
            min_value=0,
            max_value=20,
        ),
    ),
)


# ─── Notification Section ────────────────────────────────────

notification_section = SettingsSectionDefinition(
    key="notification",
    label="تنظیمات اطلاع‌رسانی",
    label_en="Notification Settings",
    description="تنظیمات اطلاع‌رسانی قراردادها",
    icon="HiOutlineBell",
    order=5,
    fields=(
        SettingsFieldDefinition(
            key="expiry_warning_days",
            field_type="int",
            label="هشدار انقضا (روز قبل)",
            label_en="Expiry Warning (days before)",
            default_value=30,
            min_value=1,
            max_value=180,
        ),
        SettingsFieldDefinition(
            key="guarantee_expiry_warning_days",
            field_type="int",
            label="هشدار انقضای ضمانت‌نامه (روز قبل)",
            label_en="Guarantee Expiry Warning (days before)",
            default_value=14,
            min_value=1,
            max_value=90,
        ),
        SettingsFieldDefinition(
            key="milestone_overdue_notification",
            field_type="bool",
            label="اطلاع‌رسانی تأخیر مراحل",
            label_en="Milestone Overdue Notification",
            default_value=True,
        ),
    ),
)


# ═══════════════════════════════════════════════════
# Register Schema
# ═══════════════════════════════════════════════════

clm_settings_schema = SettingsSchemaDefinition(
    module_key="clm",
    version="1.0.0",
    label="تنظیمات مدیریت قراردادها",
    label_en="CLM Settings",
    description="تنظیمات ماژول مدیریت قراردادها",
    sections=(
        general_section,
        approval_section,
        financial_section,
        renewal_section,
        notification_section,
    ),
)


def register_clm_settings():
    """ثبت schema تنظیمات ماژول CLM."""
    settings_schema_registry.register(clm_settings_schema)
