﻿"""Helpdesk app_settings definitions."""

from __future__ import annotations

from simorgh.apps.app_settings.registry import SettingDefinition, register_setting

# Default ticket auto-close delay (hours) after being solved.
HELPDESK_AUTO_CLOSE_HOURS = register_setting(
    SettingDefinition(
        key="helpdesk.auto_close_hours",
        type="int",
        default=168,  # 7 days
        label_key="helpdesk.settings.auto_close_hours.label",
        description_key="helpdesk.settings.auto_close_hours.description",
        scopes=("system", "tenant", "org"),
    )
)

# Whether agents can see internal notes from other teams.
HELPDESK_CROSS_TEAM_NOTES = register_setting(
    SettingDefinition(
        key="helpdesk.cross_team_notes",
        type="bool",
        default=False,
        label_key="helpdesk.settings.cross_team_notes.label",
        description_key="helpdesk.settings.cross_team_notes.description",
        scopes=("system", "tenant"),
    )
)

# Max attachment size in bytes per reply (default 20 MiB).
HELPDESK_MAX_ATTACHMENT_BYTES = register_setting(
    SettingDefinition(
        key="helpdesk.max_attachment_bytes",
        type="int",
        default=20 * 1024 * 1024,
        label_key="helpdesk.settings.max_attachment_bytes.label",
        description_key="helpdesk.settings.max_attachment_bytes.description",
        scopes=("system", "tenant"),
    )
)

# Satisfaction survey: hours after solve to send CSAT request.
HELPDESK_CSAT_DELAY_HOURS = register_setting(
    SettingDefinition(
        key="helpdesk.csat_delay_hours",
        type="int",
        default=24,
        label_key="helpdesk.settings.csat_delay_hours.label",
        description_key="helpdesk.settings.csat_delay_hours.description",
        scopes=("system", "tenant"),
    )
)

# Allow portal submissions without account (anonymous tickets).
HELPDESK_PORTAL_ANONYMOUS = register_setting(
    SettingDefinition(
        key="helpdesk.portal_anonymous",
        type="bool",
        default=True,
        label_key="helpdesk.settings.portal_anonymous.label",
        description_key="helpdesk.settings.portal_anonymous.description",
        scopes=("system", "tenant"),
    )
)

# Default queue PK used when none is specified at creation (0 = resolve dynamically).
HELPDESK_DEFAULT_QUEUE_ID = register_setting(
    SettingDefinition(
        key="helpdesk.default_queue_id",
        type="int",
        default=0,
        label_key="helpdesk.settings.default_queue_id.label",
        description_key="helpdesk.settings.default_queue_id.description",
        scopes=("tenant", "org"),
    )
)

# Allow regular agents to reassign tickets to other agents.
# Supervisors (PERM_QUEUE_MANAGE or superuser) can always reassign regardless.
HELPDESK_AGENT_REASSIGN = register_setting(
    SettingDefinition(
        key="helpdesk.agent_reassign",
        type="bool",
        default=False,
        label_key="helpdesk.settings.agent_reassign.label",
        description_key="helpdesk.settings.agent_reassign.description",
        scopes=("system", "tenant"),
    )
)

# Maximum number of open tickets allowed per tenant (0 = unlimited).
HELPDESK_MAX_TICKETS = register_setting(
    SettingDefinition(
        key="helpdesk.max_tickets",
        type="int",
        default=0,
        label_key="helpdesk.settings.max_tickets.label",
        description_key="helpdesk.settings.max_tickets.description",
        scopes=("system", "tenant"),
    )
)

# Send SMS notifications for ticket events (assignment, reply, solved, escalated).
# Requires an active SMS provider and SmsProviderTemplate entries named after
# the notification kind (e.g. "helpdesk.ticket.assigned").
HELPDESK_NOTIFY_SMS = register_setting(
    SettingDefinition(
        key="helpdesk.notify_sms",
        type="bool",
        default=False,
        label_key="helpdesk.settings.notify_sms.label",
        description_key="helpdesk.settings.notify_sms.description",
        scopes=("system", "tenant"),
    )
)
