package handler

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"health-go/config"
	"health-go/model"
	"health-go/util"
	"net/http"
	"time"
)

// FetchAllRecords 每个用户全部化验记录
func FetchAllRecords(c *gin.Context) {
	var records []model.Check
	result := config.DB.Where("user_id = ?", c.Query("user_id")).Find(&records)
	if result.Error != nil {
		c.JSON(http.StatusInternalServerError, gin.H{
			"code": 500,
			"msg":  "内部服务器错误",
			"data": nil,
		})
		return
	}

	c.JSON(http.StatusOK, gin.H{
		"code": 200,
		"msg":  "ok",
		"data": records,
	})
}

func InsertRecord(c *gin.Context) {
	var newRecord model.UserInput
	if err := c.ShouldBindJSON(&newRecord); err != nil {
		fmt.Println(newRecord.Date)
		util.ReturnInvalid(c)
		return
	}
	date, _ := convertDate(newRecord.Date)
	fmt.Println(date)

	//ok, checkID := prepareInsert(1, date, newRecord.Hospital)
	//
	//if ok {
	//	var newItems []model.CheckItem

	//for fieldName, itemID := range checkItemMap {
	//	switch fieldName {
	//	case "ca125Value":
	//		if newRecord.Ca125 != -1 {
	//			newItems = append(newItems, model.CheckItem{
	//				CheckID:   checkID,
	//				ItemID:    itemID,
	//				ItemValue: newRecord.Ca125,
	//			})
	//		}
	//	case "ca199Value":
	//		if newRecord.Ca199 != -1 {
	//			newItems = append(newItems, model.CheckItem{
	//				CheckID:   checkID,
	//				ItemID:    itemID,
	//				ItemValue: newRecord.Ca199,
	//			})
	//		}
	//	case "ceaValue":
	//		if newRecord.Cea != -1 {
	//			newItems = append(newItems, model.CheckItem{
	//				CheckID:   checkID,
	//				ItemID:    itemID,
	//				ItemValue: newRecord.Cea,
	//			})
	//		}
	//	case "ca153Value":
	//		if newRecord.Ca153 != -1 {
	//			newItems = append(newItems, model.CheckItem{
	//				CheckID:   checkID,
	//				ItemID:    itemID,
	//				ItemValue: newRecord.Ca153,
	//			})
	//		}
	//	case "ca724Value":
	//		if newRecord.Ca724 != -1 {
	//			newItems = append(newItems, model.CheckItem{
	//				CheckID:   checkID,
	//				ItemID:    itemID,
	//				ItemValue: newRecord.Ca724,
	//			})
	//		}
	//	case "he4Value":
	//		if newRecord.He4 != -1 {
	//			newItems = append(newItems, model.CheckItem{
	//				CheckID:   checkID,
	//				ItemID:    itemID,
	//				ItemValue: newRecord.He4,
	//			})
	//		}
	//	case "rbcValue":
	//		if newRecord.Rbc != -1 {
	//			newItems = append(newItems, model.CheckItem{
	//				CheckID:   checkID,
	//				ItemID:    itemID,
	//				ItemValue: newRecord.Rbc,
	//			})
	//		}
	//	case "hbValue":
	//		if newRecord.Hb != -1 {
	//			newItems = append(newItems, model.CheckItem{
	//				CheckID:   checkID,
	//				ItemID:    itemID,
	//				ItemValue: newRecord.Hb,
	//			})
	//		}
	//	case "wbcValue":
	//		if newRecord.Wbc != -1 {
	//			newItems = append(newItems, model.CheckItem{
	//				CheckID:   checkID,
	//				ItemID:    itemID,
	//				ItemValue: newRecord.Wbc,
	//			})
	//		}
	//	case "pltValue":
	//		if newRecord.Plt != -1 {
	//			newItems = append(newItems, model.CheckItem{
	//				CheckID:   checkID,
	//				ItemID:    itemID,
	//				ItemValue: newRecord.Plt,
	//			})
	//		}
	//	case "neutValue":
	//		if newRecord.Neut != -1 {
	//			newItems = append(newItems, model.CheckItem{
	//				CheckID:   checkID,
	//				ItemID:    itemID,
	//				ItemValue: newRecord.Neut,
	//			})
	//		}
	//	case "weightValue":
	//		if newRecord.Weight != -1 {
	//			newItems = append(newItems, model.CheckItem{
	//				CheckID:   checkID,
	//				ItemID:    itemID,
	//				ItemValue: newRecord.Weight,
	//			})
	//		}
	//	}
	//}
	//result := config.DB.Table("check_item")
	//if result.Error != nil{
	//	c.JSON(http.StatusOK, gin.H{
	//		"code":500,
	//		"msg": "插入失败",
	//		"data": nil,
	//	})
	//}
	//	c.JSON(http.StatusOK, gin.H{
	//		"code": 200,
	//		"msg":  "添加记录成功",
	//		"data": nil,
	//	})
	//} else {
	//	c.JSON(http.StatusOK, gin.H{
	//		"code": 200,
	//		"msg":  "存在相同日期记录, 插入失败",
	//		"data": nil,
	//	})
	//}
}

func prepareInsert(userID int, date time.Time, hospital int) (pre bool, id int) {
	var aRec model.Check
	result := config.DB.Model("checks").
		Where(
			"check_date = ? AND user_id = ?",
			date.Format("2006-01-02"),
			userID).Find(&aRec)

	if result.RowsAffected == 0 {
		var newRec model.Check
		newRec.UserID = 1
		newRec.CheckDate = date
		newRec.Hospital = hospital
		newRec.InsertTime = time.Now()
		newRec.UpdateTime = time.Now()
		re := config.DB.Table("checks").Create(&newRec)
		fmt.Println(re.RowsAffected)

		return true, aRec.CheckID
	}
	return false, aRec.CheckID
}

func convertDate(dateStr string) (time.Time, error) {
	return time.Parse("2006-01-02", dateStr)
}