namespace PowderCoating.Application.DTOs.Common;

public class PagedResult<T>
{
    public IEnumerable<T> Items { get; set; } = new List<T>();

    /// <summary>
    /// Creates a PagedResult populated from a GridRequest, avoiding repetitive property
    /// assignments across every Index action. SortColumn, SortDirection, and SearchTerm
    /// are copied from the grid so the model carries full state for view binding.
    /// </summary>
    public static PagedResult<T> From(GridRequest grid, IEnumerable<T> items, int totalCount) => new()
    {
        Items = items,
        PageNumber = grid.PageNumber,
        PageSize = grid.PageSize,
        TotalCount = totalCount,
        SortColumn = grid.SortColumn,
        SortDirection = grid.SortDirection,
        SearchTerm = grid.SearchTerm
    };
    public int PageNumber { get; set; }
    public int PageSize { get; set; }
    public int TotalCount { get; set; }
    public int TotalPages => (int)Math.Ceiling(TotalCount / (double)PageSize);
    public bool HasPreviousPage => PageNumber > 1;
    public bool HasNextPage => PageNumber < TotalPages;
    public int StartIndex => (PageNumber - 1) * PageSize + 1;
    public int EndIndex => Math.Min(PageNumber * PageSize, TotalCount);
    public string? SortColumn { get; set; }
    public string SortDirection { get; set; } = "asc";
    public string? SearchTerm { get; set; }
}
