package exam

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"zhenyihuibao/business/formValidate"
	"zhenyihuibao/business/cache"
	"zhenyihuibao/business/services"
	"zhenyihuibao/common/constData"
)

type Exam struct {
}

func(this *Exam) BankList(c *gin.Context) {

	var examVali formValidate.ExamBankList
	err := c.ShouldBind(&examVali)
	err = formValidate.CommonValidate1(examVali)
	if err != nil {
		fmt.Println(err)
		constData.ReturnHandle.Error(c, 10005, err.Error())
		return
	}
	examCache := cache.ExamCache{}
	examData, err := examCache.GetBankList(examVali.P)
	if err != nil {
		constData.ReturnHandle.Error(c,  50000, err.Error())
		return
	}
	constData.ReturnHandle.Success(c, "获取数据成功", examData)
}

func (this *Exam) BankInfo(c *gin.Context) {
	var examVali formValidate.ExamBankInfo
	err := c.ShouldBind(&examVali)
	err = formValidate.CommonValidate1(examVali)
	if err != nil {
		fmt.Println(err)
		constData.ReturnHandle.Error(c, 10005, err.Error())
		return
	}
	examCache := cache.ExamCache{}
	examInfo, err := examCache.GetBankInfo(examVali.Id)
	if err != nil {
		constData.ReturnHandle.Error(c,  50000, err.Error())
		return
	}
	examData := map[string]interface{}{
		"examInfo": examInfo,
	}
	constData.ReturnHandle.Success(c, "获取数据成功", examData)
}

func (this *Exam) StartExam(c *gin.Context) {
	var examVali formValidate.StartExam
	err := c.ShouldBind(&examVali)
	err = formValidate.CommonValidate1(examVali)
	if err != nil {
		fmt.Println(err)
		constData.ReturnHandle.Error(c, 10005, err.Error())
		return
	}
	examService := services.ExamService{}
	userId := c.GetInt("user_id")
	examData, err := examService.StartExam(userId, examVali.Id)
	if err != nil {
		constData.ReturnHandle.Error(c,  50000, err.Error())
		return
	}
	constData.ReturnHandle.Success(c, "获取数据成功", examData)
}

func (this *Exam) GetNextTit(c *gin.Context) {
	var examVali formValidate.ExamGetNextTit
	err := c.ShouldBind(&examVali)
	err = formValidate.CommonValidate1(examVali)
	if err != nil {
		fmt.Println(err)
		constData.ReturnHandle.Error(c, 10005, err.Error())
		return
	}
	examService := services.ExamService{}
	examData, err := examService.GetNextTit(examVali.Id)
	if err != nil {
		constData.ReturnHandle.Error(c,  50000, err.Error())
		return
	}
	constData.ReturnHandle.Success(c, "获取数据成功", examData)
}

func (this *Exam) SaveAnswer(c *gin.Context) {
	var examVali formValidate.ExamSaveAnswer
	err := c.ShouldBind(&examVali)
	err = formValidate.CommonValidate1(examVali)
	if err != nil {
		fmt.Println(err)
		constData.ReturnHandle.Error(c, 10005, err.Error())
		return
	}
	examService := services.ExamService{}
	userId := c.GetInt("user_id")
	examData, err := examService.SaveAnswer(userId, &examVali)
	if err != nil {
		constData.ReturnHandle.Error(c,  50000, err.Error())
		return
	}
	constData.ReturnHandle.Success(c, "获取数据成功", examData)
}

func (this *Exam) EndExam(c *gin.Context) {
	var examVali formValidate.EndExam
	err := c.ShouldBind(&examVali)
	err = formValidate.CommonValidate1(examVali)
	if err != nil {
		fmt.Println(err)
		constData.ReturnHandle.Error(c, 10005, err.Error())
		return
	}
	examService := services.ExamService{}
	userId := c.GetInt("user_id")
	examData, err := examService.EndExam(userId, examVali.Id)
	if err != nil {
		constData.ReturnHandle.Error(c,  50000, err.Error())
		return
	}
	constData.ReturnHandle.Success(c, "提交成功", examData)
}