package common

const (
	// DefaultPage default page
	DefaultPage = 1
	// DefaultSize default page size
	DefaultSize = 10
)

type PageRequest struct {
	Page        int    `form:"page" json:"page"`                   // 页码
	PageSize    int    `form:"page_size" json:"page_size" `        // 每页大小
	OrderBy     string `form:"order_by" json:"order_by"`           // 排序字段
	OrderByMode string `form:"order_by_mode" json:"order_by_mode"` // 排序方式 desc asc
}

func (p *PageRequest) Offset() int {
	return (p.getPage() - 1) * p.getPageSize()
}

func (p *PageRequest) Limit() int {
	return p.getPageSize()
}

func (p *PageRequest) GetOrderBy(dft string) string {
	if p.OrderBy != "" {
		return p.OrderBy
	}
	return dft
}

func (p *PageRequest) GetOrderByMode() string {
	if p.OrderByMode != "" {
		return p.OrderByMode
	}
	return "ASC"
}

func (p *PageRequest) getPage() int {
	if p.Page == 0 {
		return DefaultPage
	}
	return p.Page
}

func (p *PageRequest) getPageSize() int {
	if p.PageSize == 0 {
		return DefaultSize
	}
	return p.PageSize
}

func (p *PageRequest) getTotalPage(total int64) int64 {
	size := p.getPageSize()
	if total%int64(size) == 0 {
		return total / int64(size)
	} else {
		return total/int64(size) + 1
	}
}

func (p *PageRequest) PageInfo(total int64) *PageInfo {
	return &PageInfo{
		TotalNumber: total,
		PageSize:    p.getPageSize(),
		Page:        p.getPage(),
		TotalPage:   p.getTotalPage(total),
	}
}

type PageInfo struct {
	TotalNumber int64 `json:"total_number"` // 数据总数
	Page        int   `json:"page"`         // 当前页码
	PageSize    int   `json:"page_size"`    // 每页大小
	TotalPage   int64 `json:"total_page"`   // 总页码数
}