package com.usky.ems.service;

import com.usky.ems.service.vo.EmsAttributePointVO;
import com.usky.ems.service.vo.EmsEnergyTypeVO;
import com.usky.ems.service.vo.EmsGatewayDeviceTreeNode;
import com.usky.ems.service.vo.EmsModelSaveRequest;
import com.usky.ems.service.vo.EmsStructureTreeNode;
import com.usky.ems.service.vo.EnergyTypeWrapperProductVO;
import com.usky.ems.service.vo.DmpGatewayDetailResponse;

import java.util.List;

/**
 * 基础建模服务（model：结构树、能源类型、建筑/区域/网关/通道/设备/属性点位）
 */
public interface EmsModelService {

    /**
     * 获取项目层级树（建筑、区域、网关）
     */
//    EmsStructureTreeNode getStructureTree(Long projectId, Boolean includeGateway);

    /**
     * 能源类型列表（按当前租户产品关联的 ems_product_energy_type 动态返回）
     */
    List<EmsEnergyTypeVO> getEnergyTypeList();

    /**
     * 展示已关联的能源类型及其下属分项/产品列表
     * 数据来源：leo.ems_energy_item_code.energy_type 分组
     */
    List<EnergyTypeWrapperProductVO> showAssociatedEnergyTypes();

    /** 建筑：新增 */
    Long createBuilding(EmsModelSaveRequest request);
    /** 建筑：编辑 */
    void updateBuilding(Long id, EmsModelSaveRequest request);
    /** 建筑：删除 */
    void deleteBuilding(Long id);

    /** 区域：新增 */
    Long createRegion(EmsModelSaveRequest request);
    /** 区域：编辑 */
    void updateRegion(Long id, EmsModelSaveRequest request);
    /** 区域：删除 */
    void deleteRegion(Long id);

    /** 网关：新增 */
    String createGateway(EmsModelSaveRequest request);
    /** 网关：编辑 */
    void updateGateway(String id, EmsModelSaveRequest request);
    /** 网关：删除 */
    void deleteGateway(String id);
//
//    /** 通道：新增 */
//    Long createChannel(EmsModelSaveRequest request);
//    /** 通道：编辑 */
//    void updateChannel(Long id, EmsModelSaveRequest request);
//    /** 通道：删除 */
//    void deleteChannel(Long id);
//
//    /** 设备：新增 */
//    String createDevice(EmsModelSaveRequest request);
//    /** 设备：编辑 */
//    void updateDevice(String id, EmsModelSaveRequest request);
//    /** 设备：删除 */
//    void deleteDevice(String id);
//
//    /** 属性点位：新增 */
//    Long createAttributePoint(EmsModelSaveRequest request);
//    /** 属性点位：编辑 */
//    void updateAttributePoint(Long id, EmsModelSaveRequest request);
//    /** 属性点位：删除 */
//    void deleteAttributePoint(Long id);

    /**
     * 网关-通道-设备树（中间面板）
     * @param spaceId 空间ID（可选，不传返回全部网关）
     * @param keyword 网关名称关键字模糊搜索（可选）
     */
    List<EmsGatewayDeviceTreeNode> getGatewayDeviceTree(Long spaceId, String keyword);

    /**
     * 属性点位列表（右侧面板）
     * @param deviceId 设备ID
     */
    List<EmsAttributePointVO> getAttributePointList(String deviceId);

    /**
     * 空间绑定网关（一个空间可绑定多个网关）
     * @param spaceId 空间ID
     * @param gatewayUuids 网关uuid列表
     */
    void bindSpaceGateways(Long spaceId, List<String> gatewayUuids);

    /**
     * 空间解绑网关（一个空间可解绑多个网关）
     * @param spaceId 空间ID
     * @param gatewayUuids 网关uuid列表
     */
    void unbindSpaceGateways(Long spaceId, List<String> gatewayUuids);

    /**
     * 根据空间ID查询绑定的网关列表
     * @param spaceId 空间ID
     */
    List<DmpGatewayDetailResponse> getGatewayListBySpaceId(Long spaceId);
}
