package dao

import (
	"fonchain-artshow/cmd/model"
	"fonchain-artshow/pkg/db"
	uuid "github.com/satori/go.uuid"
	"go.uber.org/zap"
	"gorm.io/gorm"
)

func SaveShowRels(tx *gorm.DB, showRels []*model.ShowRel) (err error, out []string) {
	out = make([]string, 0)
	for i := 0; i < len(showRels); i++ {
		uid, err := uuid.NewV4()
		if err != nil {
			return err, out
		}
		showRels[i].ShowRelUID = uid.String()
		err = tx.Model(&model.ShowRel{}).Create(&showRels[i]).Error
		if err != nil {
			zap.L().Error("ShowRels save err", zap.Error(err))
			return err, nil
		}
		out = append(out, showRels[i].ApplyUID)
	}
	return
}

func UpdateShowRels(tx *gorm.DB, showRels []*model.ShowRel) (err error, out []string) {
	out = make([]string, 0)
	for i := 0; i < len(showRels); i++ {
		results := tx.Model(&model.ShowRel{}).Where("show_uid = ? and apply_uid = ?", showRels[i].ShowUID, showRels[i].ApplyUID).First(&showRels[i])
		if results.Error != nil {
			zap.L().Error("ShowRels updates err", zap.Error(err))
			return err, nil
		}
		out = append(out, showRels[i].ApplyUID)
	}
	return
}

func SaveShowRel(tx *gorm.DB, showRel *model.ShowRel) (err error) {
	err = tx.Model(&model.ShowRel{}).Where("show_uid = ?", showRel.ShowUID).Updates(showRel).Error
	if err != nil {
		zap.L().Error("ShowRel  err", zap.Error(err))
		return err
	}
	return
}

func DelShowRel(tx *gorm.DB, showRelUIDs []string) (err error) {
	err = tx.Where("show_rel_uid in (?)", showRelUIDs).Delete(&model.ShowRel{}).Error
	if err != nil {
		zap.L().Error("ShowRel delete err", zap.Error(err))
		return
	}
	return
}

func DelShowRelByApplyUID(tx *gorm.DB, applyUID string) (err error) {
	err = tx.Where("apply_uid = ? ", applyUID).Delete(&model.ShowRel{}).Error
	if err != nil {
		zap.L().Error("ShowRel by applyUID delete err", zap.Error(err))
		return
	}
	return
}

func QueryShowRel_showUID(showUID string) (err error, out *model.ShowRel) {
	out = new(model.ShowRel)
	findDB := db.DbArtShow.Model(&model.ShowRel{})
	if showUID != "" {
		findDB = findDB.Where("show_uid = ? ", showUID)
	}
	err = findDB.Find(&out).Error
	if err != nil {
		zap.L().Error("QueryShowRel err", zap.Error(err))
		return
	}
	return
}

func QueryShowRelList(applyUID string) (err error, out []*model.ShowRel) {
	out = make([]*model.ShowRel, 0)
	findDB := db.DbArtShow.Model(&model.ShowRel{})
	if applyUID != "" {
		findDB = findDB.Where("apply_uid = ? ", applyUID)
	}
	err = findDB.Find(&out).Error
	if err != nil {
		zap.L().Error("QueryShowRelList err", zap.Error(err))
		return
	}
	return
}