package eta_trial

import (
	"github.com/beego/beego/v2/client/orm"
	"time"
)

type EtaTrialQuestionnaire struct {
	QuestionnaireId int    `orm:"column(questionnaire_id);pk" description:"问卷题目id"`
	Question        string `description:"题目"`
	Options         string `description:"选项"`
	Type            int    `description:"1单选 2多选 3简答题"`
	Sort            int    `description:"排序"`
	IsMust          int    `description:"是否必填"`
	CreateTime      time.Time
}

// Update
func (item *EtaTrialQuestionnaire) Update(cols []string) (err error) {
	o := orm.NewOrm()
	_, err = o.Update(item, cols...)
	return
}

// AddEtaTrialQuestionnaire
func AddEtaTrialQuestionnaire(questionnaire *EtaTrialQuestionnaire) (err error) {
	o := orm.NewOrm()
	id, err := o.Insert(questionnaire)
	if err != nil {
		return
	}
	questionnaire.QuestionnaireId = int(id)
	return
}


func GetETATrialQuestionnaireList(cond string) (items []*EtaTrialQuestionnaire, err error) {
	sql := `SELECT * FROM eta_trial_questionnaire AS a WHERE 1=1  `
	o := orm.NewOrm()
	if cond != "" {
		sql += cond
	}
	_, err = o.Raw(sql).QueryRows(&items)
	return
}

type EtaTrialQuestionnaireRespItem struct {
	QuestionnaireId int      `orm:"column(questionnaire_id);pk" description:"问卷题目id"`
	Question        string   `description:"题目"`
	Type            int      `description:"1单选 2多选 3简答题"`
	Sort            int      `description:"排序"`
	Options          []string `description:"选项"`
	IsMust          int      `description:"是否必填"`
	CreateTime      string
}
type EtaTrialQuestionnaireResp struct {
	List []EtaTrialQuestionnaireRespItem
}

type EtaTrialQuestionnaireSaveReq struct {
	List []EtaTrialQuestionnaireSaveItem
}

type EtaTrialQuestionnaireSaveItem struct {
	QuestionnaireId int      ` description:"问卷题目id"`
	Question        string   `description:"题目"`
	Options         []string `description:"选项"`
	Sort            int      `description:"排序"`
	IsMust          int      `description:"是否必填 0是 1不是"`
	Type            int      `description:"1单选 2多选 3简答题"`
}

type EtaTrialQuestionnaireDelReq struct {
	QuestionnaireId int `description:"问卷题目id"`
}

func GetETATrialQuestionnaireById(qId int) (count int, err error) {
	sql := `SELECT count(1) AS count FROM eta_trial_questionnaire WHERE questionnaire_id = ?  `
	o := orm.NewOrm()
	err = o.Raw(sql, qId).QueryRow(&count)
	return
}

func DelETATrialQuestionnaireById(qId int) (err error) {
	o := orm.NewOrm()
	to, err := o.Begin()
	if err != nil {
		return
	}
	defer func() {
		if err != nil {
			_ = to.Rollback()
		} else {
			_ = to.Commit()
		}
	}()

	//删问题
	sql := `DELETE FROM eta_trial_questionnaire WHERE questionnaire_id = ?  `
	_, err = to.Raw(sql, qId).Exec()
	if err != nil {
		return
	}

	//删选项
	sql = `DELETE FROM eta_trial_questionnaire_options WHERE questionnaire_id = ?  `
	_, err = to.Raw(sql, qId).Exec()
	if err != nil {
		return
	}

	//删记录
	sql = `DELETE FROM eta_trial_questionnaire_record WHERE questionnaire_id = ?  `
	_, err = to.Raw(sql, qId).Exec()
	if err != nil {
		return
	}
	return
}

func AddETATrialQuestionnaire(questions []*EtaTrialQuestionnaire) (err error) {
	o := orm.NewOrm()
	to, err := o.Begin()
	if err != nil {
		return
	}
	defer func() {
		if err != nil {
			_ = to.Rollback()
		} else {
			_ = to.Commit()
		}
	}()

	//新增问题
	_, tmpErr := to.InsertMulti(len(questions), questions)
	if tmpErr != nil {
		err = tmpErr
		return
	}

	return
}

func (m EtaTrialQuestionnaireResp) Len() int {
	return len(m.List)
}

func (m EtaTrialQuestionnaireResp) Less(i, j int) bool {
	return m.List[i].Sort < m.List[j].Sort
}

func (m EtaTrialQuestionnaireResp) Swap(i, j int) {
	m.List[i], m.List[j] = m.List[j], m.List[i]
}