package exam

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

var (
	PageSize 	= 10
	StatusOnline 		=  1
	StatusOffline  	  	=  2
)

//试卷表
type QuesBank struct {
	Id        	int   		`xorm:"not null pk autoincr INT(10)" json:"id"`
	Title 		string 		`xorm:"not null comment('标题') index VARCHAR(255)" json:"title"`
	Desc 		string 		`xorm:"not null comment('描述') index VARCHAR(600)" json:"desc"`
	Score	    int 		`xorm:"not null comment('分值') INT(11)" json:"score"`
	LimitTime   int 		`xorm:"not null comment('限制次数') INT(11)" json:"limit_time"`
	StartTime   time.Time 	`xorm:"created not null default 'CURRENT_TIMESTAMP' TIMESTAMP" json:"start_time,omitempty"`
	EndTime  	time.Time 	`xorm:"created not null default 'CURRENT_TIMESTAMP' TIMESTAMP" json:"end_time,omitempty"`
	TitNums		int 		`xorm:"not null comment('题目总数') INT(11)" json:"tit_nums"`
	Status   	int 		`xorm:"not null comment('状态') INT(11)" json:"status"`
}

func(this *QuesBank) TableName() string{
	return "ques_bank"
}

func (this *QuesBank) GetRowById(itemId int) (bankInfo *QuesBank, err error) {
	rowModel := &QuesBank{Id:itemId}
	has, err := conf.SqlServer.Get(rowModel)
	if err != nil || has == false {
		err =  errors.New("获取不到QuesBank信息!")
		return
	}
	bankInfo = rowModel
	return
}

func (this *QuesBank) GetBankList(startPage int) (maxPage int, curPage int, bankList []*QuesBank, err error){
	session := conf.SqlServer.Where("1=1")
	total, err := session.Where("status = ?", StatusOnline).Count(new(QuesBank))
	if err != nil {
		logging.MyLogger.Infof("Model.QuesBank.GetBankList ---- 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("status = ?", StatusOnline).OrderBy("weight desc, start_time desc").Limit(PageSize, startPage).Find(&bankList)
	if err != nil {
		logging.MyLogger.Infof("Model.QuesBank.GetBankList ---- sql查询失败",err.Error())
		return
	}
	return
}

func (this *QuesBank) GetAllBankList() (bankList []*QuesBank, err error){
	session := conf.SqlServer.Where("1=1")
	err = session.Where("status = ?", StatusOnline).OrderBy("weight desc, start_time desc").Find(&bankList)
	if err != nil {
		logging.MyLogger.Infof("Model.QuesBank.GetBankList ---- sql查询失败",err.Error())
		return
	}
	return
}
