"""DMS app_settings definitions.

All DMS settings follow the platform app_settings pattern:
  - Register a SettingDefinition at import time via register_setting()
  - Values are resolved at runtime via app_settings.services.resolve()
  - Import this module from DMSConfig.ready() so definitions are registered
    on application startup.

Scope hierarchy (first match wins at runtime):
  user → module → org_node → tenant → system → built-in default
"""

from __future__ import annotations

from simorgh.apps.app_settings.registry import SettingDefinition, register_setting


# ---------------------------------------------------------------------------
# File upload limits
# ---------------------------------------------------------------------------

DMS_MAX_FILE_SIZE_MB = register_setting(
    SettingDefinition(
        key="dms.max_file_size_mb",
        type="int",
        default=100,
        label_key="dms.settings.max_file_size_mb.label",
        description_key="dms.settings.max_file_size_mb.description",
        scopes=("system", "tenant"),
    )
)

DMS_ALLOWED_CONTENT_TYPES = register_setting(
    SettingDefinition(
        key="dms.allowed_content_types",
        type="json",
        default=[
            "application/pdf",
            "application/msword",
            "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
            "application/vnd.ms-excel",
            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
            "application/vnd.ms-powerpoint",
            "application/vnd.openxmlformats-officedocument.presentationml.presentation",
            "text/plain",
            "text/csv",
            "image/jpeg",
            "image/png",
            "image/gif",
            "image/webp",
            "image/tiff",
            "application/zip",
            "application/x-zip-compressed",
        ],
        label_key="dms.settings.allowed_content_types.label",
        description_key="dms.settings.allowed_content_types.description",
        scopes=("system", "tenant"),
    )
)

# ---------------------------------------------------------------------------
# Feature flags
# ---------------------------------------------------------------------------

DMS_OCR_ENABLED = register_setting(
    SettingDefinition(
        key="dms.ocr_enabled",
        type="bool",
        default=False,
        label_key="dms.settings.ocr_enabled.label",
        description_key="dms.settings.ocr_enabled.description",
        scopes=("system", "tenant"),
    )
)

DMS_VERSIONING_ENABLED = register_setting(
    SettingDefinition(
        key="dms.versioning_enabled",
        type="bool",
        default=True,
        label_key="dms.settings.versioning_enabled.label",
        description_key="dms.settings.versioning_enabled.description",
        scopes=("system", "tenant"),
    )
)

DMS_RETENTION_ENABLED = register_setting(
    SettingDefinition(
        key="dms.retention_enabled",
        type="bool",
        default=False,
        label_key="dms.settings.retention_enabled.label",
        description_key="dms.settings.retention_enabled.description",
        scopes=("system", "tenant"),
    )
)

DMS_WATERMARK_ENABLED = register_setting(
    SettingDefinition(
        key="dms.watermark_enabled",
        type="bool",
        default=False,
        label_key="dms.settings.watermark_enabled.label",
        description_key="dms.settings.watermark_enabled.description",
        scopes=("system", "tenant"),
    )
)

DMS_REQUIRE_CHECKOUT = register_setting(
    SettingDefinition(
        key="dms.require_checkout_before_edit",
        type="bool",
        default=False,
        label_key="dms.settings.require_checkout.label",
        description_key="dms.settings.require_checkout.description",
        scopes=("system", "tenant"),
    )
)

# ---------------------------------------------------------------------------
# Collaboration
# ---------------------------------------------------------------------------

DMS_COMMENTS_ENABLED = register_setting(
    SettingDefinition(
        key="dms.comments_enabled",
        type="bool",
        default=True,
        label_key="dms.settings.comments_enabled.label",
        description_key="dms.settings.comments_enabled.description",
        scopes=("system", "tenant"),
    )
)

DMS_ANNOTATIONS_ENABLED = register_setting(
    SettingDefinition(
        key="dms.annotations_enabled",
        type="bool",
        default=True,
        label_key="dms.settings.annotations_enabled.label",
        description_key="dms.settings.annotations_enabled.description",
        scopes=("system", "tenant"),
    )
)

# ---------------------------------------------------------------------------
# Preview
# ---------------------------------------------------------------------------

DMS_PREVIEW_ENABLED = register_setting(
    SettingDefinition(
        key="dms.preview_enabled",
        type="bool",
        default=True,
        label_key="dms.settings.preview_enabled.label",
        description_key="dms.settings.preview_enabled.description",
        scopes=("system", "tenant"),
    )
)

# ---------------------------------------------------------------------------
# Default view preference (user-level)
# ---------------------------------------------------------------------------

DMS_DEFAULT_VIEW_MODE = register_setting(
    SettingDefinition(
        key="dms.default_view_mode",
        type="string",
        default="list",
        label_key="dms.settings.default_view_mode.label",
        description_key="dms.settings.default_view_mode.description",
        scopes=("system", "tenant", "user"),
    )
)
