# Class GestorUsuarios

java.lang.Object
Controlador.GestorUsuarios

public class GestorUsuarios extends Object
Controlador responsable de la gestión de usuarios.

Coordina el registro, inicio y cierre de sesión, validaciones y consultas sobre usuarios. Actúa como intermediario entre la capa de vista y la capa de persistencia.

Version:
  1.1
Author:
  Adrián

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `private ArrayList<Usuario>`
  `listaUsuarios`
  Lista de usuarios cargada una sola vez al iniciar el gestor.
  `private GestorPersistencia`
  `persistencia`
  Implementación de persistencia inyectada por constructor.
  `private Usuario`
  `usuarioActual`
  Usuario que ha iniciado sesión actualmente.

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `GestorUsuarios(GestorPersistencia persistencia)`
  Crea un nuevo GestorUsuarios con la implementación de persistencia indicada.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `String`
  `borrarUsuario(String username)`
  Elimina un usuario del sistema por su username.
  `Usuario`
  `buscarUsuario(String username)`
  Busca un usuario por su nombre de usuario en `listaUsuarios`.
  `void`
  `cerrarSesion()`
  Cierra la sesión del usuario actual.
  `boolean`
  `esAdministrador()`
  Comprueba si el usuario con sesión activa es administrador.
  `ArrayList<Usuario>`
  `getListaUsuarios()`
  Devuelve la lista completa de usuarios registrados en el sistema.
  `Usuario`
  `getUsuarioActual()`
  Devuelve el usuario que tiene la sesión activa.
  `Usuario`
  `iniciarSesion(String username, String contrasena)`
  Intenta iniciar sesión con las credenciales proporcionadas.
  `String`
  `registrarUsuario(String username, String contrasena)`
  Registra un nuevo jugador si las credenciales superan las validaciones y el username no está ya en uso.
  `private String`
  `validarPassword(String password)`
  Valida el formato de la contraseña.
  `private String`
  `validarUsername(String username)`
  Valida el formato del nombre de usuario.

  ### Methods inherited from class Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Field Details

  - ### persistencia

    private GestorPersistencia persistencia
    Implementación de persistencia inyectada por constructor.

  - ### listaUsuarios

    private ArrayList<Usuario> listaUsuarios
    Lista de usuarios cargada una sola vez al iniciar el gestor.

  - ### usuarioActual

    private Usuario usuarioActual
    Usuario que ha iniciado sesión actualmente. Null si no hay sesión activa.

- ## Constructor Details

  - ### GestorUsuarios

    public GestorUsuarios(GestorPersistencia persistencia)
    Crea un nuevo GestorUsuarios con la implementación de persistencia indicada. Carga la lista de usuarios desde disco una única vez.
    Parameters:
      `persistencia` - implementación de `GestorPersistencia` a utilizar

- ## Method Details

  - ### iniciarSesion

    public Usuario iniciarSesion(String username, String contrasena)
    Intenta iniciar sesión con las credenciales proporcionadas.

    Busca el username en `listaUsuarios` y verifica la contraseña. Si las credenciales son correctas, guarda el usuario en `usuarioActual`.

    Parameters:
      `username` - nombre de usuario
      `contrasena` - contraseña en texto plano
    Returns:
      el `Usuario` autenticado, o `null` si las credenciales son incorrectas

  - ### registrarUsuario

    public String registrarUsuario(String username, String contrasena)
    Registra un nuevo jugador si las credenciales superan las validaciones y el username no está ya en uso.
    Parameters:
      `username` - nombre de usuario deseado
      `contrasena` - contraseña deseada
    Returns:
      `null` si el registro fue exitoso, o un mensaje de error si falló

  - ### validarUsername

    private String validarUsername(String username)
    Valida el formato del nombre de usuario.

    Reglas: no vacío, mínimo 3 caracteres, solo letras, números y guiones.

    Parameters:
      `username` - nombre de usuario a validar
    Returns:
      `null` si es válido, o mensaje de error si no lo es

  - ### validarPassword

    private String validarPassword(String password)
    Valida el formato de la contraseña.

    Reglas: no vacía, mínimo 8 caracteres, sin punto y coma. El punto y coma está prohibido porque es el separador usado en los ficheros de persistencia; permitirlo rompería la deserialización.

    Parameters:
      `password` - contraseña a validar
    Returns:
      `null` si es válida, o mensaje de error si no lo es

  - ### cerrarSesion

    public void cerrarSesion()
    Cierra la sesión del usuario actual. Tras llamar a este método, `getUsuarioActual()` devolverá `null`.

  - ### getUsuarioActual

    public Usuario getUsuarioActual()
    Devuelve el usuario que tiene la sesión activa.
    Returns:
      el `Usuario` autenticado, o `null` si no hay sesión

  - ### buscarUsuario

    public Usuario buscarUsuario(String username)
    Busca un usuario por su nombre de usuario en `listaUsuarios`.
    Parameters:
      `username` - nombre de usuario a buscar
    Returns:
      el `Usuario` encontrado, o `null` si no existe

  - ### esAdministrador

    public boolean esAdministrador()
    Comprueba si el usuario con sesión activa es administrador.
    Returns:
      `true` si `usuarioActual` es instancia de `Administrador`

  - ### getListaUsuarios

    public ArrayList<Usuario> getListaUsuarios()
    Devuelve la lista completa de usuarios registrados en el sistema. Usado principalmente por `VentanaAdmin` para mostrar el panel de gestión.
    Returns:
      `ArrayList` con todos los `Usuario` registrados

  - ### borrarUsuario

    public String borrarUsuario(String username)
    Elimina un usuario del sistema por su username. Restricciones: no se puede borrar al propio usuario con sesión activa, ni a otro administrador.
    Parameters:
      `username` - nombre de usuario a eliminar
    Returns:
      `null` si se eliminó correctamente, o un mensaje de error