package handler

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

func FetchHospitalList(c *gin.Context) {
	var hosList []model.Hospital
	result := config.DB.Table("hospital").Find(&hosList)
	if result.Error != nil {
		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":  "获取医院列表成功",
		"data": hosList,
	})
}

func AddHospital(c *gin.Context) {
	var newHospital model.Hospital
	if err := c.ShouldBindJSON(&newHospital); err != nil {
		util.ReturnInvalid(c)
		return
	}

	util.ReturnJson(c, http.StatusOK, 400, "invalid params", nil)
	result := config.DB.Create(newHospital)
	fmt.Println(newHospital)
	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":  "添加医院成功",
		"data": nil,
	})
}

func ModifyHospital(c *gin.Context) {
	var hos model.Hospital
	if err := c.ShouldBindJSON(&hos); err != nil {
		util.ReturnInvalid(c)
		return
	}
	if ok, err := hospital.Modify(hos); ok {
		c.JSON(http.StatusOK, gin.H{
			"code": 200,
			"msg":  "修改医院信息成功",
			"data": nil,
		})
	} else {
		c.JSON(http.StatusInternalServerError, gin.H{
			"code": 500,
			"msg":  "修改医院信息失败",
			"data": err,
		})
		return
	}

}

// DeleteHospital
// @Accept       json
// @Produce      json
// @Param hos_id query int true "医院id" "maxlength(100)"
func DeleteHospital(c *gin.Context) {
	var hospital model.Hospital
	if err := c.ShouldBindJSON(&hospital); err != nil {
		util.ReturnInvalid(c)
		return
	}
	result := config.DB.Delete(&hospital)
	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":  "删除指定医院成功",
		"data": nil,
	})
}