@startuml use-cases
!theme plain
skinparam actorStyle awesome
skinparam packageStyle rectangle
skinparam usecaseBackgroundColor #F8F9FA
skinparam usecaseBorderColor #495057
skinparam actorBackgroundColor #007AFF

title Sistema de Registro de Estudiantes - Diagrama de Casos de Uso

actor "Estudiante" as student
actor "Administrador" as admin

rectangle "Sistema de Inscripción Académica" {
    ' Autenticación (ambos actores)
    usecase "Iniciar sesión" as UC_LOGIN
    usecase "Recuperar contraseña" as UC_RECOVER

    ' Solo estudiantes
    usecase "Registrarse" as UC_REGISTER
    usecase "Activar cuenta" as UC_ACTIVATE
    usecase "Ver dashboard personal" as UC_DASHBOARD
    usecase "Ver materias disponibles" as UC_SUBJECTS
    usecase "Inscribirse en materia" as UC_ENROLL
    usecase "Cancelar inscripción" as UC_UNENROLL
    usecase "Ver mis inscripciones" as UC_MY_ENROLL
    usecase "Ver compañeros de clase" as UC_CLASSMATES

    ' Solo administrador
    usecase "Gestionar estudiantes\n(CRUD)" as UC_CRUD
    usecase "Ver todos los estudiantes" as UC_LIST
    usecase "Crear estudiante" as UC_CREATE
    usecase "Editar estudiante" as UC_EDIT
    usecase "Eliminar estudiante" as UC_DELETE

    ' Validaciones (includes)
    usecase "Validar límite de créditos\n(máx 9 créditos)" as UC_VAL_CREDITS
    usecase "Validar restricción de profesor\n(no repetir profesor)" as UC_VAL_PROF
}

' Relaciones Estudiante
student --> UC_REGISTER
student --> UC_LOGIN
student --> UC_ACTIVATE
student --> UC_RECOVER
student --> UC_DASHBOARD
student --> UC_SUBJECTS
student --> UC_ENROLL
student --> UC_UNENROLL
student --> UC_MY_ENROLL
student --> UC_CLASSMATES

' Relaciones Admin
admin --> UC_LOGIN
admin --> UC_RECOVER
admin --> UC_CRUD
admin --> UC_LIST

' Extensiones CRUD
UC_CRUD ..> UC_CREATE : <<include>>
UC_CRUD ..> UC_EDIT : <<include>>
UC_CRUD ..> UC_DELETE : <<include>>

' Validaciones inscripción
UC_ENROLL ..> UC_VAL_CREDITS : <<include>>
UC_ENROLL ..> UC_VAL_PROF : <<include>>

note right of UC_ENROLL
  Reglas de negocio:
  - Máximo 3 materias (9 créditos)
  - No puede tener 2 materias
    del mismo profesor
  - Requiere cuenta activada
end note

note right of UC_CLASSMATES
  Solo muestra nombres
  de compañeros por materia
end note

note right of UC_ACTIVATE
  El estudiante recibe
  código de activación
  al registrarse
end note

note bottom of admin
  Acceso completo al
  CRUD de estudiantes
end note

@enduml
