"""HR IAM permission definitions."""

from __future__ import annotations


def register_all() -> None:
    """Register all HR permissions into the IAM registry."""
    from simorgh.apps.iam.registry import register_permission

    # ── Employee ─────────────────────────────────────────────────────────────
    register_permission(
        "hr.employee.view",
        label="مشاهده کارمندان",
        description="View employee records.",
    )
    register_permission(
        "hr.employee.create",
        label="ایجاد کارمند",
        description="Create new employee records.",
    )
    register_permission(
        "hr.employee.update",
        label="ویرایش کارمند",
        description="Update employee fields.",
    )
    register_permission(
        "hr.sensitive.view",
        label="مشاهده اطلاعات حساس",
        description="View national ID and bank account numbers.",
    )
    register_permission(
        "hr.employee.terminate",
        label="خاتمه همکاری کارمند",
        description="Terminate an employee (set status=terminated).",
    )

    # ── Document ──────────────────────────────────────────────────────────────
    register_permission(
        "hr.document.manage",
        label="مدیریت مدارک کارمندان",
        description="Upload, verify, and delete employee documents.",
    )

    # ── Job Title ─────────────────────────────────────────────────────────────
    register_permission(
        "hr.job_title.manage",
        label="مدیریت عناوین شغلی",
        description="Create, edit, and delete job titles.",
    )

    # ── Job Family ────────────────────────────────────────────────────────────
    register_permission(
        "hr.job_family.view",
        label="مشاهده خانواده‌های شغلی",
        description="View job families.",
    )
    register_permission(
        "hr.job_family.manage",
        label="مدیریت خانواده‌های شغلی",
        description="Create, edit, and delete job families.",
    )

    # ── Job Grade ─────────────────────────────────────────────────────────────
    register_permission(
        "hr.job_grade.view",
        label="مشاهده گریدهای شغلی",
        description="View job grades.",
    )
    register_permission(
        "hr.job_grade.manage",
        label="مدیریت گریدهای شغلی",
        description="Create, edit, and delete job grades.",
    )

    # ── Position ──────────────────────────────────────────────────────────────
    register_permission(
        "hr.position.view",
        label="مشاهده پست‌های سازمانی",
        description="View positions.",
    )
    register_permission(
        "hr.position.manage",
        label="مدیریت پست‌های سازمانی",
        description="Create, edit, and delete positions.",
    )

    # ── Employment ────────────────────────────────────────────────────────────
    register_permission(
        "hr.employment.view",
        label="مشاهده استخدام‌ها",
        description="View employment records.",
    )
    register_permission(
        "hr.employment.manage",
        label="مدیریت استخدام‌ها",
        description="Create, edit, and delete employment records.",
    )

    # ── Contract ──────────────────────────────────────────────────────────────
    register_permission(
        "hr.contract.view",
        label="مشاهده قراردادها",
        description="View employment contracts.",
    )
    register_permission(
        "hr.contract.manage",
        label="مدیریت قراردادها",
        description="Create, edit, and delete employment contracts.",
    )

    # ── Leave (S4.2) ──────────────────────────────────────────────────────────
    register_permission(
        "hr.leave.request",
        label="درخواست مرخصی",
        description="Submit and manage own leave requests.",
    )
    register_permission(
        "hr.leave.approve",
        label="تایید/رد مرخصی",
        description="Approve or reject subordinate leave requests.",
    )
    register_permission(
        "hr.leave.manage",
        label="مدیریت مرخصی",
        description="Admin: manage leave types, holidays, allocate balances.",
    )

    # ── Attendance (S4.3) ─────────────────────────────────────────────────────
    register_permission(
        "hr.attendance.view_own",
        label="مشاهده حضور خود",
        description="View own attendance records and monthly summary.",
    )
    register_permission(
        "hr.attendance.view_team",
        label="مشاهده حضور تیم",
        description="View attendance records for team members.",
    )
    register_permission(
        "hr.attendance.manage",
        label="مدیریت حضور و غیاب",
        description="Admin: create, edit, finalize, and delete attendance records.",
    )
    register_permission(
        "hr.shift.manage",
        label="مدیریت شیفت‌ها",
        description="Create, update, and delete shift definitions and assignments.",
    )


# Convenience constants used across services / views
PERM_EMPLOYEE_VIEW = "hr.employee.view"
PERM_EMPLOYEE_CREATE = "hr.employee.create"
PERM_EMPLOYEE_UPDATE = "hr.employee.update"
PERM_EMPLOYEE_SENSITIVE_VIEW = "hr.sensitive.view"
PERM_EMPLOYEE_TERMINATE = "hr.employee.terminate"
PERM_DOCUMENT_MANAGE = "hr.document.manage"
PERM_JOB_TITLE_MANAGE = "hr.job_title.manage"

# Job Architecture
PERM_JOB_FAMILY_VIEW = "hr.job_family.view"
PERM_JOB_FAMILY_MANAGE = "hr.job_family.manage"
PERM_JOB_GRADE_VIEW = "hr.job_grade.view"
PERM_JOB_GRADE_MANAGE = "hr.job_grade.manage"

# Position
PERM_POSITION_VIEW = "hr.position.view"
PERM_POSITION_MANAGE = "hr.position.manage"

# Employment
PERM_EMPLOYMENT_VIEW = "hr.employment.view"
PERM_EMPLOYMENT_MANAGE = "hr.employment.manage"
PERM_CONTRACT_VIEW = "hr.contract.view"
PERM_CONTRACT_MANAGE = "hr.contract.manage"

# Leave (S4.2)
PERM_LEAVE_REQUEST = "hr.leave.request"
PERM_LEAVE_APPROVE = "hr.leave.approve"
PERM_LEAVE_MANAGE = "hr.leave.manage"

# Attendance (S4.3)
PERM_ATTENDANCE_VIEW_OWN = "hr.attendance.view_own"
PERM_ATTENDANCE_VIEW_TEAM = "hr.attendance.view_team"
PERM_ATTENDANCE_MANAGE = "hr.attendance.manage"
PERM_SHIFT_MANAGE = "hr.shift.manage"
