package message

type Page struct {
	Page     int `json:"page"`
	PageSize int `json:"pageSize"`
	Total    int `json:"total"`
}

// Result Public structure for replying to http messages
type Result struct {
	Code    int         `json:"code"`           //http error code
	Message string      `json:"message"`        //http error msg
	Data    interface{} `json:"data,omitempty"` //The returned content, storage in JSON format
}

// PageRequest The paging information parameters passed in by the client when requesting the server
type PageRequest struct {
	Page     int `json:"page" form:"page"`         //Current page location
	PageSize int `json:"pageSize" form:"pageSize"` //Number of this request
}

// GetOffset get the Page's offset
func (p PageRequest) GetOffset() int {
	if p.Page == 0 {
		p.Page = 1
	}
	return (p.Page - 1) * p.PageSize
}

// CalcOffset the Page's offset in query
func (p *PageRequest) CalcOffset() (offset int) {
	if p.Page > 1 {
		offset = (p.Page - 1) * p.PageSize
	} else {
		offset = 0
	}
	return
}

type TimeRangeRequest struct {
	Before uint64 `json:"before" form:"before"`
	After  uint64 `json:"after" form:"after"`
}

type ContinueRequest struct {
	Limit         int64  `json:"limit" form:"limit"`
	ContinueToken string `json:"continueToken" form:"continueToken"`
}

type ContinueResponse struct {
	ContinueToken      string `json:"continueToken" form:"continueToken"`
	RemainingItemCount int64  `json:"remainingItemCount" form:"remainingItemCount"`
}

type Pagination struct {
	Limit int `json:"limit" form:"limit,default=20" validate:"omitempty,gt=0,max=1000"`
	Page  int `json:"page" form:"page,default=1" validate:"omitempty,gt=0"`
}
