package service

import (
	"fmt"
	"strings"

	"be.ems/src/framework/utils/generate"
	"be.ems/src/framework/utils/machine"
	"be.ems/src/modules/core/model"
	"be.ems/src/modules/core/repository"
)

// 实例化服务层 CoreInfo 结构体
var NewCoreInfo = &CoreInfo{
	CoreInfoRepository: repository.NewCoreInfo,
}

// CoreInfo 核心网信息 服务层处理
type CoreInfo struct {
	CoreInfoRepository *repository.CoreInfo // 核心网信息表
}

// FindByPage 分页查询列表数据
func (r CoreInfo) FindByPage(query map[string]string) ([]model.CoreInfo, int64) {
	return r.CoreInfoRepository.SelectByPage(query)
}

// FindById 通过ID查询
func (r CoreInfo) FindById(id int64) model.CoreInfo {
	if id <= 0 {
		return model.CoreInfo{}
	}
	neHosts := r.CoreInfoRepository.SelectByIds([]int64{id})
	if len(neHosts) > 0 {
		return neHosts[0]
	}
	return model.CoreInfo{}
}

// Insert 新增信息
func (r CoreInfo) Insert(param model.CoreInfo) int64 {
	param.CoreUID = strings.ToUpper(generate.Code(8))
	if param.OmcId == "" {
		param.OmcId = machine.Code
	}

	return r.CoreInfoRepository.Insert(param)
}

// Update 修改信息
func (r CoreInfo) Update(param model.CoreInfo) int64 {
	return r.CoreInfoRepository.Update(param)
}

// DeleteByIds 批量删除信息
func (r CoreInfo) DeleteByIds(ids []int64) (int64, error) {
	// 检查是否存在
	rows := r.CoreInfoRepository.SelectByIds(ids)
	if len(rows) <= 0 {
		return 0, fmt.Errorf("coreInfo.noData")
	}

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

// CheckUniqueGroupTitle 校验唯一名称和序号
func (r CoreInfo) CheckUniqueGroupTitle(name, sn string, id int64) bool {
	uniqueId := r.CoreInfoRepository.CheckUnique(model.CoreInfo{
		Name: name,
		SN:   sn,
	})
	if uniqueId == id {
		return true
	}
	return uniqueId == 0
}
