from django.db import models


class UserRole(models.TextChoices):
    SYSTEM_ADMIN = "system_admin", "System administrator"
    ADMIN = "admin", "Administrator"
    GRANTS_MANAGER = "grants_manager", "Grants manager"
    PROGRAM_MANAGER = "program_manager", "Program manager"
    PROGRAM_DIRECTOR = "program_director", "Program director"
    FINANCE_OFFICER = "finance_officer", "Finance officer"
    FINANCE_DIRECTOR = "finance_director", "Finance director"
    APPLICANT = "applicant", "Applicant"
    SCHOLAR = "scholar", "Scholar"
    LEARNER = "learner", "Learner"
    INSTRUCTOR = "instructor", "Course instructor"
    REP_LEARNING_ADMIN = "rep_learning_admin", "REP learning administrator"
    ALUMNI = "alumni", "Alumni"
    ENTREPRENEUR = "entrepreneur", "Entrepreneur"
    MENTOR = "mentor", "Mentor"
    INVESTOR = "investor", "Investor"
    RESEARCHER = "researcher", "Researcher"
    REVIEWER = "reviewer", "Reviewer"
    MEL_OFFICER = "mel_officer", "M&E officer"
    REPO_MANAGER = "repo_manager", "Repository manager"
    ALUMNI_OFFICER = "alumni_officer", "Alumni officer"
    SERVICE_PROVIDER = "service_provider", "Service provider"
    PARTNER = "partner", "Partner organisation"
    BUYER = "buyer", "Buyer / Off-taker"
    FUNDER = "funder", "Funder / Donor"
    JUDGE = "judge", "Judge / Evaluator"
    PROGRAMME_OFFICER = "programme_officer", "Programme officer"
    SME_ADMIN = "sme_admin", "SME-Hub administrator"
    # SRS §4.3.1 / NFRFA011 — read-only audit-trail review (P0 RBAC fix).
    AUDITOR = "auditor", "Auditor"
    # SRS §5.4 FRFM006/016/024/034 — distinct disbursement approval tier (P0 RBAC fix).
    FINANCE_MANAGER = "finance_manager", "Finance manager"
    # SRS §5.4 FRFM011/029 — budget revision approver (P0 RBAC fix).
    PROGRAM_COORDINATOR = "program_coordinator", "Program coordinator"
    # SRS §5.4 FRFM028/029/030/035 — disbursement requester (P0 RBAC fix).
    PROJECT_MANAGER = "project_manager", "Project manager"
    # Funding-administration org chart — grants review sign-off tier, distinct from REVIEWER.
    GRANTS_VALIDATOR = "grants_validator", "Grants validator"
    PRINCIPAL_INVESTIGATOR = "principal_investigator", "Principal investigator"
    SCHOLARSHIP_MANAGER = "scholarship_manager", "Scholarship manager"
    SCHOLARSHIP_REVIEWER = "scholarship_reviewer", "Scholarship reviewer"
    SCHOLARSHIP_VALIDATOR = "scholarship_validator", "Scholarship validator"
    PLANNING_MONITORING_EVALUATION = "planning_monitoring_evaluation", "Planning, monitoring and evaluation"
    HUMAN_RESOURCE = "human_resource", "Human resource"
    # Conducts/records applicant household-eligibility ("home") visits; see HomeValidationView.
    SCHOLARSHIP_HOME_VALIDATOR = "scholarship_home_validator", "Scholarship home validator"
    # Repository org-chart roles surfaced during 2026-07 field interviews. "Collection
    # Manager" is deliberately NOT a role here — it's already modeled as a per-collection
    # relationship (Collection.managed_by in apps/repository/documents/models.py).
    KHUB_MANAGER = "khub_manager", "K-Hub manager"
    KNOWLEDGE_MANAGEMENT_OFFICER = "knowledge_management_officer", "Knowledge management officer"
    COLLABORATOR = "collaborator", "Collaborator"
    REPOSITORY_ADMIN = "repository_admin", "Repository admin"
    EDITOR_IN_CHIEF = "editor_in_chief", "Editor in chief"
    DIGITAL_ACADEMY_OFFICER = "digital_academy_officer", "Digital academy officer"
    # 2026-07 field interviews (Repository SP6) — performs compliance and
    # licensing checks on submissions; distinct from Reviewer (rubric scoring)
    # and Editor in Chief (final decision).
    PUBLICATION_ASSISTANT = "publication_assistant", "Publication assistant"
