# Class GestorEstadisticas

java.lang.Object
Controlador.GestorEstadisticas

public class GestorEstadisticas extends Object
Gestor de estadísticas del sistema. Coordina el registro, consulta y ranking de resultados de partidas. Delega toda la persistencia en GestorPersistencia.

Version:
  3.0
Author:
  juan Carlos

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `private ArrayList<Estadistica>`
  `listaEstadisticas`
  `private GestorPersistencia`
  `persistencia`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `GestorEstadisticas(GestorPersistencia persistencia)`
  Constructor de GestorEstadisticas.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `ArrayList<Estadistica>`
  `calcularRanking(String nombreJuego)`
  Calcula el ranking de un juego concreto ordenado por puntuación de mayor a menor.
  `int`
  `contarPartidas(String username)`
  Cuenta el total de partidas jugadas por un usuario.
  `int`
  `contarVictorias(String username)`
  Cuenta el total de victorias de un usuario.
  `ArrayList<Estadistica>`
  `getEstadisticasUsuario(Usuario u)`
  Devuelve todas las estadísticas de un usuario concreto.
  `ArrayList<Estadistica>`
  `getUltimasPartidas(Usuario u, int n)`
  Devuelve las últimas n estadísticas de un usuario, ordenadas de más reciente a más antigua.
  `void`
  `registrarResultado(Partida partida)`
  Registra el resultado de una partida finalizada.

  ### Methods inherited from class Object

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

- ## Field Details

  - ### persistencia

    private GestorPersistencia persistencia

  - ### listaEstadisticas

    private ArrayList<Estadistica> listaEstadisticas

- ## Constructor Details

  - ### GestorEstadisticas

    public GestorEstadisticas(GestorPersistencia persistencia)
    Constructor de GestorEstadisticas.
    Parameters:
      `persistencia` - implementación de GestorPersistencia a utilizar para guardar y cargar estadísticas

- ## Method Details

  - ### registrarResultado

    public void registrarResultado(Partida partida)
    Registra el resultado de una partida finalizada. Extrae los datos de cada jugador, crea una Estadistica por cada uno y la guarda en persistencia y en la lista en memoria.
    Parameters:
      `partida` - partida finalizada de la que se extrae el resultado

  - ### getEstadisticasUsuario

    public ArrayList<Estadistica> getEstadisticasUsuario(Usuario u)
    Devuelve todas las estadísticas de un usuario concreto.
    Parameters:
      `u` - usuario del que se quieren las estadísticas
    Returns:
      lista con las estadísticas del usuario

  - ### getUltimasPartidas

    public ArrayList<Estadistica> getUltimasPartidas(Usuario u, int n)
    Devuelve las últimas n estadísticas de un usuario, ordenadas de más reciente a más antigua. Si el usuario tiene menos de n partidas, devuelve todas. El ordenamiento aprovecha el método `isBefore` de `LocalDate` para una comparación semánticamente clara.
    Parameters:
      `u` - usuario del que se quieren las estadísticas
      `n` - número máximo de resultados a devolver
    Returns:
      lista con las últimas n estadísticas del usuario

  - ### calcularRanking

    public ArrayList<Estadistica> calcularRanking(String nombreJuego)
    Calcula el ranking de un juego concreto ordenado por puntuación de mayor a menor.
    Parameters:
      `nombreJuego` - nombre del juego del que se quiere el ranking
    Returns:
      lista de estadísticas ordenadas por puntuación descendente

  - ### contarPartidas

    public int contarPartidas(String username)
    Cuenta el total de partidas jugadas por un usuario.
    Parameters:
      `username` - nombre del usuario
    Returns:
      número de partidas jugadas

  - ### contarVictorias

    public int contarVictorias(String username)
    Cuenta el total de victorias de un usuario.
    Parameters:
      `username` - nombre del usuario
    Returns:
      número de victorias