package exam

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

const(
	STATUS_EMPTY = -1
	STATUS_DONE	 = -2
)

//用户答题分值表
type QuesUserScore struct {
	Id        	int   		`xorm:"not null pk autoincr INT(10)" json:"id"`
	QuesBankId	int			`xorm:"not null comment('试卷id') INT(11)"`
	UserId 		int			`xorm:"not null comment('userId') INT(11)"`
	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"`
	Score   	int 		`xorm:"not null comment('分值') INT(11)" json:"score"`
	Status   	int 		`xorm:"not null comment('下一题') INT(11)" json:"status"`
}

//Status 取值范围 -1 表示没题目了 0表示已结束 >0表示要读取的题目

func (this *QuesUserScore) GetRowById(itemId int) (itemRow *QuesUserScore, err error) {
	rowModel := &QuesUserScore{Id:itemId}
	has, err := conf.SqlServer.Get(rowModel)
	if err != nil || has == false {
		err =  errors.New("找不到该数据!")
		return
	}
	itemRow = rowModel
	return
}

func (this *QuesUserScore) AddLogAndReturn(userId, bankId, status int) (rowModel *QuesUserScore, err error) {
	rowModel = &QuesUserScore{
		UserId:		userId,
		QuesBankId:	bankId,
		StartTime:time.Now(),
		EndTime:time.Now(),
		Score:0,
		Status:status,
	}
	affected, err := conf.SqlServer.Insert(rowModel)
	if err != nil {
		return
	}
	logging.MyLogger.Debug("影响行数", affected)
	return
}

func (this *QuesUserScore) GetRowByBankUserId(userId, bankId int) (itemRow *QuesUserScore, err error) {
	rowModel := &QuesUserScore{
		UserId:		userId,
		QuesBankId:	bankId,
	}
	//has, err := conf.SqlServer.Where("status !=?", STATUS_DONE).Get(rowModel)
	has, err := conf.SqlServer.Get(rowModel)
	if err != nil || has == false {
		err =  errors.New("找不到该数据!")
		return
	}
	itemRow = rowModel
	return
}

//更改下一题存储值
func (this *QuesUserScore) UpdateNextTitIdInStatus(itemId, nextTitId int) (err error) {
	//row := &QuesUserScore{Id:itemId}
	//has, err := conf.SqlServer.Get(row)
	//if err != nil || has == false {
	//	err =  errors.New("找不到该数据!")
	//	return
	//}
	//row.Status = nextTitId
	row := &QuesUserScore{Status:nextTitId}
	affected, err := conf.SqlServer.Id(itemId).Update(row)
	if err != nil {
		logging.MyLogger.Infof("更改下一题存储值影响行数", affected)
		return
	}
	logging.MyLogger.Infof("影响行数", affected)
	return
}

//用户最后提交成绩
func (this *QuesUserScore) SubmitUserScore(itemRow *QuesUserScore) (err error) {
	affected, err := conf.SqlServer.Id(itemRow.Id).Update(itemRow)
	if err != nil {
		logging.MyLogger.Errorf("用户提交成绩影响行数", affected)
		return
	}
	logging.MyLogger.Infof("用户提交成绩影响行数", affected)
	return
}
