package yuyue

import (
	"errors"
	"math"
	"time"
	"zhenyihuibao/conf"
	"zhenyihuibao/pkg/logging"
)

const (
	StatusYes 		=  1;	//可约
	StatusNo  	  	=  2;	//不可约
	StatusFull 		= 3;	//已约满
	StatusHave 		= 10;	//已经预约
)

var (
	PageSize 	= 30
	StatusMsg 	= map[int]string{
		StatusYes:	"可约",
		StatusNo:	"不可约",
		StatusFull:	"已约满",
		StatusHave:	"已预约",
	}
)




//预约表
type Yuyue struct {
	Id        	int   		`xorm:"not null pk autoincr INT(10)" json:"id"`
	Day 		string 		`xorm:"not null comment('课程日期') index VARCHAR(255)" json:"day"`
	DayRuleId   int 		`xorm:"not null comment('当日分段ID') INT(11)" json:"day_rule_id"`
	MaxNums   	int 		`xorm:"not null comment('maxNums') INT(11)" json:"max_nums"`
	CreateTime  time.Time 	`xorm:"created not null default 'CURRENT_TIMESTAMP' TIMESTAMP" json:"create_time,omitempty"`
	UpdateTime  time.Time 	`xorm:"created not null default 'CURRENT_TIMESTAMP' TIMESTAMP" json:"update_time,omitempty"`
	Status   	int 		`xorm:"not null comment('状态') INT(11)" json:"status"`
}

func (this *Yuyue) GetRowById(yueId int) (yue *Yuyue, err error) {
	rowModel := &Yuyue{Id:yueId}
	has, err := conf.SqlServer.Get(rowModel)
	if err != nil || has == false {
		err =  errors.New("找不到令牌!")
		return
	}
	yue = rowModel
	return
}

func (this *Yuyue) GetYueList(startPage int,startTime string, endTime string) (maxPage int, curPage int, yueList []*Yuyue, err error){
	session := conf.SqlServer.Where("1=1")
	total, err := session.Where("day >= ? and day <= ?", startTime, endTime).Count(new(Yuyue))
	if err != nil {
		logging.MyLogger.Infof("Model.GetYueList ---- sql查询失败",err.Error())
		return
	}
	if startPage <= 0 {
		startPage = 0
	}
	maxPage = int(math.Ceil(float64(total)/float64(PageSize)))
	if startPage > maxPage {
		startPage = maxPage
	}
	startPage = startPage*PageSize
	err = session.Where("day >= ? and day <= ?", startTime, endTime).OrderBy("day asc, day_rule_id asc").Limit(PageSize, startPage).Find(&yueList)
	if err != nil {
		logging.MyLogger.Infof("Model.GetYueList ---- sql查询失败",err.Error())
		return
	}
	return
}