package models

import (
	"math"
)

type PageResult struct {
	List      Articles `json:"list"`
	Total     int      `json:"total"`
	Page      int      `json:"page"`
	PageSize  int      `json:"pageSize"`
	TotalPage int
}

func Pagination(articles *Articles, page int, pageSize int) PageResult {

	articleLen := len(*articles)
	totalPage := int(math.Floor(float64(articleLen / pageSize)))

	if (articleLen % pageSize) != 0 {
		totalPage++
	}
	result := PageResult{
		Total:     articleLen,
		Page:      page,
		PageSize:  pageSize,
		TotalPage: totalPage,
	}
	if page < 1 {
		result.Page = 1
	}
	if page > result.TotalPage {
		result.Page  = result.TotalPage
	}

	if articleLen <= result.PageSize {
		result.List = (*articles)[0:articleLen]
	} else {
		startNum := (result.Page - 1) * result.PageSize
		endNum := startNum + result.PageSize
		if endNum > articleLen {
			endNum = articleLen
		}
		result.List = (*articles)[startNum:endNum]
	}

	return result
}