package com.codebyte.api.common.web;

import java.util.List;
import org.springframework.data.domain.Page;

/**
 * Stable, framework-agnostic representation of a page of results. The API never returns Spring
 * Data's {@link Page} directly, whose JSON shape is unstable across versions.
 */
public record PagedResponse<T>(
        List<T> content,
        int page,
        int size,
        long totalElements,
        int totalPages,
        boolean first,
        boolean last) {

    public static <T> PagedResponse<T> from(Page<T> page) {
        return new PagedResponse<>(
                page.getContent(),
                page.getNumber(),
                page.getSize(),
                page.getTotalElements(),
                page.getTotalPages(),
                page.isFirst(),
                page.isLast());
    }
}
