package service

import (
	"XT_New/models"
	"github.com/jinzhu/gorm"
	"time"
)

func UpdateSysItemIdByID(sysInspection *models.InspectionReference) error {
	db := XTWriteDB()
	err := db.Model(&models.InspectionReference{}).Update(&sysInspection).Error
	return err
}

func GetSysInspectionList(orgID int64) (sysInspection []*models.InspectionReference,ownerInspection []*models.InspectionReference, err error) {
	db := XTReadDB()
	err = db.Model(&models.InspectionReference{}).Where("org_id= 0 and status=1").Find(&sysInspection).Error
	err = db.Model(&models.InspectionReference{}).Where("org_id= ? and status=1", orgID).Find(&ownerInspection).Error
	return
}

func GetSyncList(orgID int64, page, limit int64) (patients []*models.MiddleSyncInfo, total int64, err error) {
	//db := MiddleReadDB()
	db := MiddleReadDB()
	offset := (page - 1) * limit
	err = db.Model(&models.MiddleSyncInfo{}).Where("org_id=? ", orgID).Count(&total).Offset(offset).Limit(limit).Find(&patients).Error
	return
}

func SaveInterface(interfaceinfo *models.MiddleInterface) error {
	db := MiddleWriteDB()
	if (interfaceinfo.ID > 0 ) {
		err := db.Save(&interfaceinfo).Error
		return err
	} else {
		err := db.Create(&interfaceinfo).Error
		return err
	}
}

func GetInterface(orgID int64) (interfaceinfo models.MiddleInterface, err error){
	db := MiddleReadDB()
	err = db.Model(&models.MiddleInterface{}).Where("org_id=? and status=1", orgID).First(&interfaceinfo).Error
	return
}

func GetIntegrationPatientList(orgID int64, page, limit int64) (patients []*models.VMPatients, total int64, err error) {
	//db := MiddleReadDB()
	db := readDb.Model(&models.VMPatients{}).Where("status=1")
	if orgID > 0 {
		db = db.Where("user_org_id=?", orgID)
	}
	offset := (page - 1) * limit
	err = db.Preload("VMHisPatients", func(db *gorm.DB) *gorm.DB {
		return readMiddleDb.Model(&models.VMHisPatients{}).Where("status = 1 AND user_org_id = ?", orgID)
	}).Preload("Contagions", "status = 1").Group("id").Count(&total).Offset(offset).Limit(limit).Find(&patients).Error
	return
}

func UpdatePatientsHis(org_id int64, his_user_id string, id int64) (err error) {
	db := MiddleWriteDB()
	err = db.Model(&models.HisPatients{}).Where("user_org_id = ? AND id = ?", org_id, id).Updates(map[string]interface{}{"mtime": time.Now().Unix(), "his_user_id": his_user_id}).Error
	return
}

func CreatePatientsHis(patient *models.HisPatients) (err error) {
	db := MiddleWriteDB()
	err = db.Save(&patient).Error
	return
}

func FindVMPatientById(orgID int64, id int64) (patient models.VMPatients, err error) {
	db := XTReadDB()
	err = db.Model(&models.VMPatients{}).Where("id = ? and user_org_id=? and status=1", id, orgID).First(&patient).Error
	return
}

func FindHisPatientByHisId(orgID int64, his_user_id string) (total int64, err error) {
	db := MiddleReadDB()
	err = db.Model(&models.HisPatients{}).Where("his_user_id = ? and user_org_id=? and status=1", his_user_id, orgID).Count(&total).Error
	return

}

func GetAdminUsers(orgID int64, appID int64, page int, limit int) (admins []*models.VMUserAdminRole, total int64, err error) {
	db := readUserDb.Model(&models.VMUserAdminRole{}).Where("status=1")
	if orgID > 0 {
		db = db.Where("org_id = ? AND app_id = ?", orgID, appID)
	}
	offset := (page - 1) * limit
	err = db.Preload("HisUserAdminRole", func(db *gorm.DB) *gorm.DB {
		return readMiddleDb.Model(&models.HisUserAdminRole{}).Where("status = 1 AND org_id = ? AND app_id = ?", orgID, appID)
	}).Preload("VMUserAdmin", "status = 1").Preload("VMUserRole", "status = 1 AND org_id = ? AND app_id = ?", orgID, appID).Count(&total).Offset(offset).Limit(limit).Find(&admins).Error
	return
}

func UpdateAdminsHis(org_id int64, his_user_id string, id int64) (err error) {
	db := MiddleWriteDB()
	err = db.Model(&models.HisUserAdminRole{}).Where("org_id = ? AND id = ?", org_id, id).Updates(map[string]interface{}{"mtime": time.Now().Unix(), "his_user_id": his_user_id}).Error
	return
}

func CreateAdminsHis(admin *models.HisUserAdminRole) (err error) {
	db := MiddleWriteDB()
	err = db.Save(&admin).Error
	return
}

func FindVMAdminRoleById(orgID int64, id int64, app_id int64) (admin models.VMUserAdminRole, err error) {
	db := UserReadDB()
	err = db.Model(&models.VMUserAdminRole{}).Where("admin_user_id = ? and org_id=?  and app_id = ? and status=1", id, orgID, app_id).First(&admin).Error
	return
}

func FindHisAdminByHisId(orgID int64, his_user_id string, app_id int64) (total int64, err error) {
	db := MiddleReadDB()
	err = db.Model(&models.HisUserAdminRole{}).Where("his_user_id = ? and org_id=? and app_id = ? and status=1", his_user_id, orgID, app_id).Count(&total).Error
	return

}