package requests

import "github.com/samber/lo"

// Pager is a common paginated API response envelope.
type Pager struct {
	// Pagination contains paging inputs (page/limit) echoed back in the response.
	Pagination `      json:",inline"`
	// Total is the total number of items matching current filter (before paging).
	Total int64 `json:"total"`
	// Items is the paged result list; concrete type depends on endpoint.
	Items any `json:"items"`
}

// Pagination defines common paging query parameters used by list endpoints.
type Pagination struct {
	// Page is 1-based page index; values <= 0 are normalized to 1.
	Page int64 `json:"page"  form:"page"  query:"page"`
	// Limit is page size; only values in {10,20,50,100} are accepted (otherwise defaults to 10).
	Limit int64 `json:"limit" form:"limit" query:"limit"`
}

func (filter *Pagination) Offset() int64 {
	return (filter.Page - 1) * filter.Limit
}

func (filter *Pagination) Format() *Pagination {
	if filter.Page <= 0 {
		filter.Page = 1
	}

	if !lo.Contains([]int64{10, 20, 50, 100}, filter.Limit) {
		filter.Limit = 10
	}

	return filter
}
