package controllers

import (
	"XT_New/enums"
	service "XT_New/service/print_data_service/schedule_dialysis"
	"XT_New/utils"
	"fmt"
	"strings"
	"time"

	"github.com/astaxie/beego"
)

func PrintDataAPIControllerRegistRouters() {
	beego.Router("/api/print/schedule/dialysis", &PrintDataAPIController{}, "get:ScheduleDialysisRecordPrintData")
	beego.Router("/api/print/stock", &PrintDataAPIController{}, "get:StockRecordPrintData")
	beego.Router("/api/print/course", &PrintDataAPIController{}, "get:CourseRecordPrintData")
	beego.Router("/api/print/getlastafterweight", &PrintDataAPIController{}, "get:GetLastAfterWeight")
}

type PrintDataAPIController struct {
	BaseAuthAPIController
}

// /api/print/schedule/dialysis [get]
// @param ids:string 排班 id,以逗号隔开 ("1,2,3")
func (this *PrintDataAPIController) ScheduleDialysisRecordPrintData() {
	schIDStr := this.GetString("ids")
	if len(schIDStr) == 0 {
		this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
		return
	}

	idStrs := strings.Split(schIDStr, ",")
	adminUserInfo := this.GetAdminUserInfo()
	schedules, getScheduleErr := service.GetSchedules(adminUserInfo.CurrentOrgId, idStrs)

	if getScheduleErr != nil {
		this.ErrorLog("获取打印透析记录失败:%v", getScheduleErr)
		this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
		return
	}

	medicalStaffs, getMedicalStaffErr := service.GetMedicalStaffs(adminUserInfo.CurrentOrgId, adminUserInfo.CurrentAppId)
	if getMedicalStaffErr != nil {
		this.ErrorLog("获取医护人员失败:%v", getMedicalStaffErr)
		this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
		return
	}

	adminUser, _ := service.GetAllAdminUsers(adminUserInfo.CurrentOrgId, adminUserInfo.CurrentAppId)
	name, getScheduleErr := service.GetAllName(adminUserInfo.CurrentOrgId, adminUserInfo.CurrentAppId)
	templateInfo, _ := service.GetOrgInfoTemplate(adminUserInfo.CurrentOrgId)

	this.ServeSuccessJSON(map[string]interface{}{
		"schedules":      schedules,
		"medical_staffs": medicalStaffs,
		"users":          adminUser,
		"templateInfo":   templateInfo,
		"name":           name,
	})
}

func (this *PrintDataAPIController) StockRecordPrintData() {
	types, _ := this.GetInt("type", 0)
	start_time := this.GetString("start_time")
	end_time := this.GetString("end_time")
	adminUserInfo := this.GetAdminUserInfo()

	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")
	var startTime int64
	if len(start_time) > 0 {
		theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", start_time+" 00:00:00", loc)
		if err != nil {
			this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
			return
		}
		startTime = theTime.Unix()
	}
	var endTime int64
	if len(end_time) > 0 {
		theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", end_time+" 23:59:59", loc)
		if err != nil {
			utils.ErrorLog(err.Error())
			this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
			return
		}
		endTime = theTime.Unix()
	}

	list, err := service.FindPrintStockGoodInfoByType(types, startTime, endTime, adminUserInfo.CurrentOrgId)

	if err != nil {
		this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
	} else {
		this.ServeSuccessJSON(map[string]interface{}{
			"list": list,
			"type": types,
		})
	}
}

func (this *PrintDataAPIController) CourseRecordPrintData() {
	id, _ := this.GetInt64("id", 0)
	adminUserInfo := this.GetAdminUserInfo()

	if id == 0 {
		this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
		return
	}
	timeLayout := "2006-01-02 15:04:05"
	record, err := service.GetPatientCoursesRecords(adminUserInfo.CurrentOrgId, id)
	dataTimeStr := time.Unix(record.RecordTime, 0).Format(timeLayout) //设置时间戳 使用模板格式化为日期字符串
	tempTime := strings.Split(dataTimeStr, " ")

	recordDate, parseDateErr := utils.ParseTimeStringToTime("2006-01-02", tempTime[0])
	if parseDateErr != nil {
		this.ErrorLog("日期(%v)解析错误:%v", tempTime[0], parseDateErr)
		//this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
		//return
	}

	patient, _ := service.FindPatientWithDeviceById(adminUserInfo.CurrentOrgId, record.PatientID, recordDate.Unix())
	if err != nil {
		this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
		return
	} else {
		this.ServeSuccessJSON(map[string]interface{}{
			"record":  record,
			"patient": patient,
		})
	}
}

func (this *PrintDataAPIController) GetLastAfterWeight() {
	id, _ := this.GetInt64("id")
	fmt.Print("id", id)
	assmentdate, _ := this.GetInt64("assmentdate")

	adminUserInfo := this.GetAdminUserInfo()
	org_id := adminUserInfo.CurrentOrgId
	weight, err := service.GetLastAfterWeight(org_id, id, assmentdate)
	//fmt.Print("errr-------------",err)
	if err != nil {
		this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
		return
	}
	this.ServeSuccessJSON(map[string]interface{}{
		"weight": weight,
	})
}