package service

import (
	"fmt"

	"be.ems/src/modules/network_element/model"
	"be.ems/src/modules/network_element/repository"
)

// 实例化服务层 NeVersionImpl 结构体
var NewNeVersionImpl = &NeVersionImpl{
	neVersionRepository: repository.NewNeVersionImpl,
}

// NeVersionImpl 网元版本信息 服务层处理
type NeVersionImpl struct {
	// 网元版本信息表
	neVersionRepository repository.INeVersion
}

// SelectNeHostPage 分页查询列表数据
func (r *NeVersionImpl) SelectPage(query map[string]any) map[string]any {
	return r.neVersionRepository.SelectPage(query)
}

// SelectConfigList 查询列表
func (r *NeVersionImpl) SelectList(neVersion model.NeVersion) []model.NeVersion {
	return r.neVersionRepository.SelectList(neVersion)
}

// SelectByIds 通过ID查询
func (r *NeVersionImpl) SelectById(id string) model.NeVersion {
	if id == "" {
		return model.NeVersion{}
	}
	neVersions := r.neVersionRepository.SelectByIds([]string{id})
	if len(neVersions) > 0 {
		return neVersions[0]
	}
	return model.NeVersion{}
}

// Insert 新增信息
func (r *NeVersionImpl) Insert(neVersion model.NeVersion) string {
	return r.neVersionRepository.Insert(neVersion)
}

// Update 修改信息
func (r *NeVersionImpl) Update(neVersion model.NeVersion) int64 {
	return r.neVersionRepository.Update(neVersion)
}

// DeleteByIds 批量删除信息
func (r *NeVersionImpl) DeleteByIds(ids []string) (int64, error) {
	// 检查是否存在
	rowIds := r.neVersionRepository.SelectByIds(ids)
	if len(rowIds) <= 0 {
		return 0, fmt.Errorf("neVersion.noData")
	}

	if len(rowIds) == len(ids) {
		rows := r.neVersionRepository.DeleteByIds(ids)
		return rows, nil
	}
	// 删除信息失败！
	return 0, fmt.Errorf("delete fail")
}

// SelectByTypeAndID 通过网元类型和网元ID查询
func (r *NeVersionImpl) SelectByTypeAndID(neType, neId string) model.NeVersion {
	neVersions := r.neVersionRepository.SelectList(model.NeVersion{
		NeType: neType,
		NeId:   neId,
	})
	if len(neVersions) > 0 {
		return neVersions[0]
	}
	return model.NeVersion{}
}

// CheckUniqueTypeAndID 校验网元类型和网元ID是否唯一
func (r *NeVersionImpl) CheckUniqueTypeAndID(neType, neId, id string) bool {
	uniqueId := r.neVersionRepository.CheckUniqueTypeAndID(model.NeVersion{
		NeType: neType,
		NeId:   neId,
	})
	if uniqueId == id {
		return true
	}
	return uniqueId == ""
}
