@startuml state-enrollment
!theme plain
skinparam stateBackgroundColor #F8F9FA
skinparam stateBorderColor #495057

title Estados del Estudiante y sus Inscripciones

[*] --> Registrado : Registro inicial

state "Cuenta" as cuenta {
    state "Registrado\n(Pendiente Activación)" as Registrado
    state "Activo" as Activo

    Registrado --> Activo : activar(código)
    Registrado --> Registrado : código expirado\n[regenerar código]
}

state "Inscripciones" as inscripciones {
    state "Sin Materias" as SinMaterias {
        state "0 créditos" as cred0
    }

    state "Inscripción Parcial" as Parcial {
        state "3 créditos\n(1 materia)" as cred3
        state "6 créditos\n(2 materias)" as cred6
    }

    state "Inscripción Completa" as Completa {
        state "9 créditos\n(3 materias)" as cred9
    }

    SinMaterias --> Parcial : inscribir(materia)
    Parcial --> Parcial : inscribir(materia)\n[créditos < 9]
    Parcial --> Completa : inscribir(materia)\n[créditos = 6]
    Completa --> Parcial : cancelar(inscripción)
    Parcial --> SinMaterias : cancelar(inscripción)\n[única materia]
}

Activo --> SinMaterias : cuenta activa

state validacion <<choice>>

SinMaterias --> validacion : intenta inscribir
Parcial --> validacion : intenta inscribir

validacion --> Parcial : [válido y cuenta activa]
validacion --> [*] : [inválido]\nmuestra error

note right of Registrado
  El estudiante recibe
  código de activación
  por email (24h validez)
end note

note right of Completa
  No puede inscribir
  más materias
end note

note left of Parcial
  <b>Validaciones en cada inscripción:</b>
  - Cuenta activa
  - Límite de créditos
  - No repetir profesor
  - Materia no duplicada
end note

note bottom of validacion
  Si la cuenta no está
  activa, redirige a
  página de activación
end note

@enduml
