package repository

import (
	"be.ems/src/framework/database/db"
	"be.ems/src/framework/logger"
	"be.ems/src/modules/system/model"
)

// NewSysI18n 实例化数据层
var NewSysI18n = &SysI18n{}

// SysI18nRepository 多语言 数据层处理
type SysI18n struct{}

// Select 查询集合
func (r SysI18n) Select(param model.SysI18n) []model.SysI18n {
	tx := db.DB("").Model(&model.SysI18n{})
	// 查询条件拼接
	if param.KeyLable != "" {
		tx = tx.Where("key_lable = ?", param.KeyLable)
	}
	if param.ValueZh != "" {
		tx = tx.Where("value_zh = ?", param.ValueZh)
	}
	if param.ValueEn != "" {
		tx = tx.Where("value_en = ?", param.ValueEn)
	}

	// 查询数据
	rows := []model.SysI18n{}
	if err := tx.Find(&rows).Error; err != nil {
		logger.Errorf("query find err => %v", err.Error())
		return rows
	}
	return rows
}

// SelectByIds 通过ID查询信息
func (r SysI18n) SelectByIds(ids []int64) []model.SysI18n {
	rows := []model.SysI18n{}
	if len(ids) <= 0 {
		return rows
	}
	tx := db.DB("").Model(&model.SysI18n{})
	// 构建查询条件
	tx = tx.Where("id in ?", ids)
	// 查询数据
	if err := tx.Find(&rows).Error; err != nil {
		logger.Errorf("query find err => %v", err.Error())
		return rows
	}
	return rows
}

// Insert 新增信息 返回新增数据ID
func (r SysI18n) Insert(param model.SysI18n) int64 {
	// 执行插入
	if err := db.DB("").Create(&param).Error; err != nil {
		logger.Errorf("insert err => %v", err.Error())
		return 0
	}
	return param.ID
}

// Update 修改信息 返回受影响行数
func (r SysI18n) Update(param model.SysI18n) int64 {
	if param.ID <= 0 {
		return 0
	}
	tx := db.DB("").Model(&model.SysI18n{})
	// 构建查询条件
	tx = tx.Where("id = ?", param.ID)
	tx = tx.Omit("id")
	// 执行更新
	if err := tx.Updates(param).Error; err != nil {
		logger.Errorf("update err => %v", err.Error())
		return 0
	}
	return tx.RowsAffected
}

// DeleteByIds 批量删除信息 返回受影响行数
func (r SysI18n) DeleteByIds(ids []int64) int64 {
	if len(ids) <= 0 {
		return 0
	}
	tx := db.DB("").Where("id in ?", ids)
	// 执行删除
	if err := tx.Delete(&model.SysRoleMenu{}).Error; err != nil {
		logger.Errorf("delete err => %v", err.Error())
		return 0
	}
	return tx.RowsAffected
}

// CheckUnique 检查信息是否唯一 返回ID
func (r SysI18n) CheckUnique(key string) int64 {
	tx := db.DB("").Model(&model.SysI18n{})
	tx = tx.Where("key_lable= ?", key)
	// 查询数据
	var id int64 = 0
	if err := tx.Select("id").Limit(1).Find(&id).Error; err != nil {
		logger.Errorf("query find err => %v", err.Error())
		return id
	}
	return id
}
