package utils

import (
	"fmt"
	"git.i2edu.net/i2/i2-bill-api/internal/types"
	"github.com/xormplus/xorm"
	"html/template"
)

// 分页查询

func PageSearch(db *xorm.Engine, controllername string, apiname string, tableName string, params map[string]interface{}) (*types.PageResult, error) {
	page, _ := params["page"].(int)
	rows, _ := params["rows"].(int)
	if page == 0 {
		page = 1
	}
	if rows == 0 {
		rows = 10
		params["rows"] = rows
	}
	offset := (page - 1) * rows
	params["offset"] = offset
	params["ge"] = template.HTML(">=")
	params["le"] = template.HTML("<=")
	stplkey := fmt.Sprintf("%s_%s_select.tpl", controllername, apiname)
	result, err := db.SqlTemplateClient(stplkey, &params).Query().List()
	if err != nil {
		fmt.Println(err)
		return nil, err
	}

	stplkey = fmt.Sprintf("%s_%s_count.tpl", controllername, apiname)
	cresult, err := db.SqlTemplateClient(stplkey, &params).Query().List()
	if err != nil {
		fmt.Println(err)
		return nil, err
	}

	if result == nil {
		presult := types.PageResult{}
		content := []map[string]interface{}{}
		presult.Page = (page)
		presult.Rows = (rows)
		presult.Content = content
		presult.TotalSize = 0
		presult.TotalPageSize = 0
		return &presult, nil
	}

	var records int64
	if len(cresult) > 0 {
		records = cresult[0]["records"].(int64)
	}

	var totalPageSize int64 = 0
	if records < int64(rows) {
		totalPageSize = 1
	} else if records%int64(rows) == 0 {
		totalPageSize = records / int64(rows)
	} else {
		totalPageSize = records/int64(rows) + 1
	}

	presult := types.PageResult{}
	presult.Page = (page)
	presult.Rows = (rows)
	presult.Content = result
	presult.TotalSize = records
	presult.TotalPageSize = totalPageSize
	return &presult, nil
}
