from simorgh.apps.modules.registry import (
    CapabilitySpec,
    FeatureFlagSpec,
    FeatureSpec,
    ModuleManifest,
    register_module,
)

MANIFEST = register_module(
    ModuleManifest(
        name="hr_core",
        version=2,
        domain="business",
        label_key="hr_core.module_label",
        description="HR Core — employee records, employment, positions, leave, attendance",
        capabilities=(
            CapabilitySpec(slug="employees", label_key="hr_core.capabilities.employees",
                          description="Employee records and profiles", icon="user"),
            CapabilitySpec(slug="leave", label_key="hr_core.capabilities.leave",
                          description="Leave management", icon="calendar"),
            CapabilitySpec(slug="attendance", label_key="hr_core.capabilities.attendance",
                          description="Attendance tracking", icon="clock"),
            CapabilitySpec(slug="organization", label_key="hr_core.capabilities.organization",
                          description="Organizational structure", icon="sitemap"),
            CapabilitySpec(slug="jobs", label_key="hr_core.capabilities.jobs",
                          description="Job architecture", icon="briefcase"),
            CapabilitySpec(slug="analytics", label_key="hr_core.capabilities.analytics",
                          description="HR analytics and insights", icon="bar-chart"),
        ),
        features=(
            FeatureSpec(
                code="employees.employee_records",
                label_key="hr.features.employee_records",
                scope="tenant",
                default_enabled=True,
                description="Employee profiles with job, department, personal info",
            ),
            FeatureSpec(
                code="employees.employee_self_service",
                label_key="hr.features.employee_self_service",
                scope="tenant",
                default_enabled=True,
                description="Employees update own profiles, view payslips",
            ),
            FeatureSpec(
                code="employees.sensitive_data",
                label_key="hr.features.sensitive_data",
                scope="tenant",
                default_enabled=False,
                description="Encrypted storage for national ID, bank accounts with audit",
            ),
            FeatureSpec(
                code="employees.document_management",
                label_key="hr.features.document_management",
                scope="tenant",
                default_enabled=True,
                description="Upload and verify employee documents",
            ),
            FeatureSpec(
                code="leave.leave_management",
                label_key="hr.features.leave_management",
                scope="tenant",
                default_enabled=True,
                description="Leave types, balances, request/approve workflow",
            ),
            FeatureSpec(
                code="attendance.attendance_tracking",
                label_key="hr.features.attendance_tracking",
                scope="tenant",
                default_enabled=True,
                description="Check-in/out, attendance records, overtime",
            ),
            FeatureSpec(
                code="attendance.shift_management",
                label_key="hr.features.shift_management",
                scope="tenant",
                default_enabled=False,
                description="Shift definitions and employee assignments",
            ),
            FeatureSpec(
                code="organization.org_chart",
                label_key="hr.features.org_chart",
                scope="tenant",
                default_enabled=True,
                description="Organisational hierarchy and reporting lines",
            ),
            FeatureSpec(
                code="jobs.position_management",
                label_key="hr.features.position_management",
                scope="tenant",
                default_enabled=False,
                description="Position management with assignments and headcount tracking",
            ),
            FeatureSpec(
                code="jobs.job_architecture",
                label_key="hr.features.job_architecture",
                scope="tenant",
                default_enabled=False,
                description="Job families, job grades, and job title classification",
            ),
            FeatureSpec(
                code="employees.employment_contracts",
                label_key="hr.features.employment_contracts",
                scope="tenant",
                default_enabled=False,
                description="Employment records and contract management",
            ),
            FeatureSpec(
                code="analytics.hr_analytics",
                label_key="hr.features.hr_analytics",
                scope="tenant",
                default_enabled=False,
                description="Headcount, turnover, attrition reports",
            ),
            FeatureSpec(
                code="analytics.hr_ai",
                label_key="hr.features.hr_ai",
                scope="tenant",
                default_enabled=False,
                description="AI-powered HR insights",
            ),
        ),
        permissions=(
            "hr.employee.view",
            "hr.employee.create",
            "hr.employee.update",
            "hr.sensitive.view",
            "hr.employee.terminate",
            "hr.document.manage",
            "hr.job_title.manage",
            "hr.job_family.view",
            "hr.job_family.manage",
            "hr.job_grade.view",
            "hr.job_grade.manage",
            "hr.position.view",
            "hr.position.manage",
            "hr.employment.view",
            "hr.employment.manage",
            "hr.contract.view",
            "hr.contract.manage",
            "hr.leave.request",
            "hr.leave.approve",
            "hr.leave.manage",
            "hr.attendance.view_own",
            "hr.attendance.view_team",
            "hr.attendance.manage",
            "hr.shift.manage",
            "hr.ai.query",
            "hr.ai.predict_attrition",
        ),
        events=(
            "hr.employee.hired",
            "hr.employee.terminated",
            "hr.employee.resigned",
            "hr.employee.department_changed",
            "hr.employee.manager_changed",
            "hr.employee.job_title_changed",
            "hr.position.created",
            "hr.position.filled",
            "hr.position.vacated",
            "hr.employment.created",
            "hr.employment.terminated",
            "hr.leave.requested",
            "hr.leave.approved",
            "hr.leave.rejected",
            "hr.leave.cancelled",
            "hr.attendance.checked_in",
            "hr.attendance.finalized",
            "hr.document.expiring_soon",
            "hr.ai.summary_requested",
            "hr.ai.attrition_predicted",
        ),
        feature_flags=(
            FeatureFlagSpec(
                name="allow_negative_balance",
                label_key="hr.ff.allow_negative_balance",
                default=False,
                scope="tenant",
            ),
            FeatureFlagSpec(
                name="self_service_update",
                label_key="hr.ff.self_service_update",
                default=True,
                scope="tenant",
            ),
        ),
    )
)
