namespace TakeoutSaaS.Shared.Abstractions.Results;

/// <summary>
/// 分页结果包装，携带列表与总条数等元数据。
/// </summary>
/// <typeparam name="T">数据类型。</typeparam>
/// <remarks>
/// 初始化分页结果。
/// </remarks>
public sealed class PagedResult<T>(IReadOnlyList<T> items, int page, int pageSize, int totalCount)
{
    /// <summary>
    /// 数据列表。
    /// </summary>
    public IReadOnlyList<T> Items { get; } = items;

    /// <summary>
    /// 当前页码，从 1 开始。
    /// </summary>
    public int Page { get; } = page;

    /// <summary>
    /// 每页条数。
    /// </summary>
    public int PageSize { get; } = pageSize;

    /// <summary>
    /// 总条数。
    /// </summary>
    public int TotalCount { get; } = totalCount;

    /// <summary>
    /// 总页数。
    /// </summary>
    public int TotalPages { get; } = pageSize == 0 ? 0 : (int)Math.Ceiling(totalCount / (double)pageSize);
}
