package modules

import (
	"strconv"

	"golang-fave/engine/utils"
	"golang-fave/engine/wrapper"
)

func (this *Modules) RegisterAction_SettingsPagination() *Action {
	return this.newAction(AInfo{
		Mount:     "settings-pagination",
		WantAdmin: true,
	}, func(wrap *wrapper.Wrapper) {
		pf_blog_index := utils.Trim(wrap.R.FormValue("blog-index"))
		pf_blog_category := utils.Trim(wrap.R.FormValue("blog-category"))
		pf_shop_index := utils.Trim(wrap.R.FormValue("shop-index"))
		pf_shop_category := utils.Trim(wrap.R.FormValue("shop-category"))

		if _, err := strconv.Atoi(pf_blog_index); err != nil {
			wrap.MsgError(`Blog posts count per page on main page must be integer number`)
			return
		}
		if _, err := strconv.Atoi(pf_blog_category); err != nil {
			wrap.MsgError(`Blog posts count per page on category page must be integer number`)
			return
		}

		if _, err := strconv.Atoi(pf_shop_index); err != nil {
			wrap.MsgError(`Shop products count per page on main page must be integer number`)
			return
		}
		if _, err := strconv.Atoi(pf_shop_category); err != nil {
			wrap.MsgError(`Shop products count per page on category page must be integer number`)
			return
		}

		pfi_blog_index := utils.StrToInt(pf_blog_index)
		pfi_blog_category := utils.StrToInt(pf_blog_category)

		pfi_shop_index := utils.StrToInt(pf_shop_index)
		pfi_shop_category := utils.StrToInt(pf_shop_category)

		// Correct some values
		if pfi_blog_index < 0 {
			pfi_blog_index = 1
		}
		if pfi_blog_index > 100 {
			pfi_blog_index = 100
		}

		if pfi_blog_category < 0 {
			pfi_blog_category = 1
		}
		if pfi_blog_category > 100 {
			pfi_blog_category = 100
		}

		if pfi_shop_index < 0 {
			pfi_shop_index = 1
		}
		if pfi_shop_index > 100 {
			pfi_shop_index = 100
		}

		if pfi_shop_category < 0 {
			pfi_shop_category = 1
		}
		if pfi_shop_category > 100 {
			pfi_shop_category = 100
		}

		(*wrap.Config).Blog.Pagination.Index = pfi_blog_index
		(*wrap.Config).Blog.Pagination.Category = pfi_blog_category

		(*wrap.Config).Shop.Pagination.Index = pfi_shop_index
		(*wrap.Config).Shop.Pagination.Category = pfi_shop_category

		if err := wrap.ConfigSave(); err != nil {
			wrap.MsgError(err.Error())
			return
		}

		wrap.ResetCacheBlocks()

		// Reload current page
		wrap.Write(`window.location.reload(false);`)
	})
}
