package com.ruoyi.tuya.service.impl;

import java.util.List;
import java.util.stream.Collectors;
import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.tuya.domain.TreeSelectS;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.tuya.mapper.TuyaSitesInfoMapper;
import com.ruoyi.tuya.domain.TuyaSitesInfo;
import com.ruoyi.tuya.service.ITuyaSitesInfoService;

/**
 * 平台信息Service业务层处理
 *
 * @author ruoyi
 * @date 2022-07-01
 */
@Service
public class TuyaSitesInfoServiceImpl implements ITuyaSitesInfoService
{
    @Autowired
    private TuyaSitesInfoMapper tuyaSitesInfoMapper;

    /**
     * 构建前端所需要下拉树结构
     *
     * @param sites 部门列表
     * @return 下拉树结构列表
     */
    @Override
    public List<TreeSelectS> buildDeptTreeSelect(List<TuyaSitesInfo> sites)
    {
        return sites.stream().map(TreeSelectS::new).collect(Collectors.toList());
    }

    /**
     * 校验平台名称是否唯一
     *
     * @param tuyaSitesInfo 平台信息
     * @return 结果
     */
    @Override
    public String checkSiteNameUnique(TuyaSitesInfo tuyaSitesInfo)
    {
        Long siteId = StringUtils.isNull(tuyaSitesInfo.getSiteId()) ? -1L : tuyaSitesInfo.getSiteId();
        TuyaSitesInfo info = tuyaSitesInfoMapper.checkSiteNameUnique(tuyaSitesInfo.getSiteNameCn());
        if (StringUtils.isNotNull(info) && info.getSiteId() != siteId.longValue())
        {
            return UserConstants.NOT_UNIQUE;
        }
        return UserConstants.UNIQUE;
    }

    /**
     * 校验平台名称（英文）是否唯一
     *
     * @param tuyaSitesInfo 平台信息
     * @return 结果
     */
    @Override
    public String checkSiteNameEnUnique(TuyaSitesInfo tuyaSitesInfo)
    {
        Long siteId = StringUtils.isNull(tuyaSitesInfo.getSiteId()) ? -1L : tuyaSitesInfo.getSiteId();
        TuyaSitesInfo info = tuyaSitesInfoMapper.checkSiteNameEnUnique(tuyaSitesInfo.getSiteNameEn());
        if (StringUtils.isNotNull(info) && info.getSiteId() != siteId.longValue())
        {
            return UserConstants.NOT_UNIQUE;
        }
        return UserConstants.UNIQUE;
    }

    /**
     * 查询平台信息
     *
     * @param siteId 平台信息主键
     * @return 平台信息
     */
    @Override
    public TuyaSitesInfo selectTuyaSitesInfoBySiteId(Long siteId)
    {
        return tuyaSitesInfoMapper.selectTuyaSitesInfoBySiteId(siteId);
    }

    /**
     * 查询平台下拉信息
     *
     * @param tuyaSitesInfo 平台信息
     * @return 平台信息
     */
    @Override
    public List<TuyaSitesInfo> sitesInfoSelect(TuyaSitesInfo tuyaSitesInfo)
    {
        return tuyaSitesInfoMapper.sitesInfoSelect(tuyaSitesInfo);
    }

    /**
     * 查询平台信息列表
     *
     * @param tuyaSitesInfo 平台信息
     * @return 平台信息
     */
    @Override
    public List<TuyaSitesInfo> selectTuyaSitesInfoList(TuyaSitesInfo tuyaSitesInfo)
    {
        return tuyaSitesInfoMapper.selectTuyaSitesInfoList(tuyaSitesInfo);
    }

    /**
     * 新增平台信息
     *
     * @param tuyaSitesInfo 平台信息
     * @return 结果
     */
    @Override
    public int insertTuyaSitesInfo(TuyaSitesInfo tuyaSitesInfo)
    {
        tuyaSitesInfo.setCreateTime(DateUtils.getNowDate());
        return tuyaSitesInfoMapper.insertTuyaSitesInfo(tuyaSitesInfo);
    }

    /**
     * 修改平台信息
     *
     * @param tuyaSitesInfo 平台信息
     * @return 结果
     */
    @Override
    public int updateTuyaSitesInfo(TuyaSitesInfo tuyaSitesInfo)
    {
        tuyaSitesInfo.setUpdateTime(DateUtils.getNowDate());
        return tuyaSitesInfoMapper.updateTuyaSitesInfo(tuyaSitesInfo);
    }

    /**
     * 批量删除平台信息
     *
     * @param siteIds 需要删除的平台信息主键
     * @return 结果
     */
    @Override
    public int deleteTuyaSitesInfoBySiteIds(Long[] siteIds)
    {
        return tuyaSitesInfoMapper.deleteTuyaSitesInfoBySiteIds(siteIds);
    }

    /**
     * 删除平台信息信息
     *
     * @param siteId 平台信息主键
     * @return 结果
     */
    @Override
    public int deleteTuyaSitesInfoBySiteId(Long siteId)
    {
        return tuyaSitesInfoMapper.deleteTuyaSitesInfoBySiteId(siteId);
    }

    /**
     * 是否存在子节点
     *
     * @param siteId ID
     * @return 结果
     */
    @Override
    public boolean hasChildBySiteId(Long siteId)
    {
        int result = tuyaSitesInfoMapper.hasChildBySiteId(siteId);
        return result > 0;
    }
}
