package dev.lions.unionflow.server.api.dto.base;

import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * Réponse paginée générique.
 *
 * <p>
 * Encapsule une liste d'éléments avec les
 * métadonnées de pagination (page, taille,
 * total). Utilisable pour tout type de réponse
 * paginée.
 *
 * @param <T> type des éléments de la page
 * @author UnionFlow Team
 * @version 3.0
 * @since 2026-02-21
 */
@Getter
@AllArgsConstructor
public class PageResponse<T> {

    /** Éléments de la page courante. */
    private final List<T> contenu;

    /** Numéro de page courant (0-indexed). */
    private final int page;

    /** Taille de la page demandée. */
    private final int taille;

    /** Nombre total d'éléments. */
    private final long totalElements;

    /** Nombre total de pages. */
    private final int totalPages;

    /**
     * Indique s'il existe une page suivante.
     *
     * @return {@code true} si une page suivante
     *         existe
     */
    public boolean hasNext() {
        return page < totalPages - 1;
    }

    /**
     * Indique s'il existe une page précédente.
     *
     * @return {@code true} si une page précédente
     *         existe
     */
    public boolean hasPrevious() {
        return page > 0;
    }
}
