"""HR app_settings definitions."""

from __future__ import annotations

from simorgh.apps.app_settings.registry import SettingDefinition, register_setting

# Prefix for auto-generated employee numbers (e.g. "EMP" → "EMP-0001").
HR_EMPLOYEE_NO_PREFIX = register_setting(
    SettingDefinition(
        key="hr.employee_no_prefix",
        type="string",
        default="EMP",
        label_key="hr.settings.employee_no_prefix.label",
        description_key="hr.settings.employee_no_prefix.description",
        scopes=("system", "tenant"),
    )
)

# Number of digits in the auto-generated sequence (e.g. 4 → "EMP-0001").
HR_EMPLOYEE_NO_DIGITS = register_setting(
    SettingDefinition(
        key="hr.employee_no_digits",
        type="int",
        default=4,
        label_key="hr.settings.employee_no_digits.label",
        description_key="hr.settings.employee_no_digits.description",
        scopes=("system", "tenant"),
    )
)

# Whether employees can update their own personal information via ESS.
HR_ALLOW_SELF_SERVICE_UPDATE = register_setting(
    SettingDefinition(
        key="hr.allow_self_service_update",
        type="bool",
        default=True,
        label_key="hr.settings.allow_self_service_update.label",
        description_key="hr.settings.allow_self_service_update.description",
        scopes=("system", "tenant"),
    )
)

# Maximum number of active employees allowed per tenant (0 = unlimited).
HR_MAX_EMPLOYEES = register_setting(
    SettingDefinition(
        key="hr.max_employees",
        type="int",
        default=0,
        label_key="hr.settings.max_employees.label",
        description_key="hr.settings.max_employees.description",
        scopes=("system", "tenant"),
    )
)

# ---------------------------------------------------------------------------
# Leave settings (S4.2)
# ---------------------------------------------------------------------------

HR_LEAVE_WORK_DAYS = register_setting(
    SettingDefinition(
        key="hr.leave.work_days",
        type="json",
        default=[0, 1, 2, 3, 4],  # Mon–Fri (Python: 0=Mon)
        label_key="hr.settings.leave_work_days.label",
        description_key="hr.settings.leave_work_days.description",
        scopes=("system", "tenant"),
    )
)

HR_LEAVE_CALENDAR_TYPE = register_setting(
    SettingDefinition(
        key="hr.leave.calendar_type",
        type="string",
        default="gregorian",
        label_key="hr.settings.leave_calendar_type.label",
        description_key="hr.settings.leave_calendar_type.description",
        scopes=("system", "tenant"),
    )
)

HR_LEAVE_ALLOW_NEGATIVE_BALANCE = register_setting(
    SettingDefinition(
        key="hr.leave.allow_negative_balance",
        type="bool",
        default=False,
        label_key="hr.settings.leave_allow_negative_balance.label",
        description_key="hr.settings.leave_allow_negative_balance.description",
        scopes=("system", "tenant"),
    )
)

# ---------------------------------------------------------------------------
# Attendance settings (S4.3)
# ---------------------------------------------------------------------------

HR_ATTENDANCE_OVERTIME_THRESHOLD_MINUTES = register_setting(
    SettingDefinition(
        key="hr.attendance.overtime_threshold_minutes",
        type="int",
        default=30,
        label_key="hr.settings.attendance_overtime_threshold.label",
        description_key="hr.settings.attendance_overtime_threshold.description",
        scopes=("system", "tenant"),
    )
)

HR_ATTENDANCE_ALLOW_MANUAL_ENTRY = register_setting(
    SettingDefinition(
        key="hr.attendance.allow_manual_entry",
        type="bool",
        default=True,
        label_key="hr.settings.attendance_allow_manual_entry.label",
        description_key="hr.settings.attendance_allow_manual_entry.description",
        scopes=("system", "tenant"),
    )
)
