package com.ruoyi.system.service;

import com.ruoyi.common.core.domain.R;
import com.ruoyi.system.domain.EpsNodeBandwidth;
import com.ruoyi.system.domain.InitialSwitchInfoDetails;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 交换机监控信息Service接口
 * 
 * @author gyt
 * @date 2025-08-26
 */
public interface IInitialSwitchInfoDetailsService 
{
    /**
     * 查询交换机监控信息
     * 
     * @param id 交换机监控信息主键
     * @return 交换机监控信息
     */
    public InitialSwitchInfoDetails selectInitialSwitchInfoDetailsById(Long id);

    /**
     * 查询交换机监控信息列表
     * 
     * @param initialSwitchInfoDetails 交换机监控信息
     * @return 交换机监控信息集合
     */
    public List<InitialSwitchInfoDetails> selectInitialSwitchInfoDetailsList(InitialSwitchInfoDetails initialSwitchInfoDetails);

    /**
     * 新增交换机监控信息
     * 
     * @param initialSwitchInfoDetails 交换机监控信息
     * @return 结果
     */
    public int insertInitialSwitchInfoDetails(InitialSwitchInfoDetails initialSwitchInfoDetails);

    /**
     * 修改交换机监控信息
     * 
     * @param initialSwitchInfoDetails 交换机监控信息
     * @return 结果
     */
    public int updateInitialSwitchInfoDetails(InitialSwitchInfoDetails initialSwitchInfoDetails);

    /**
     * 批量删除交换机监控信息
     * 
     * @param ids 需要删除的交换机监控信息主键集合
     * @return 结果
     */
    public int deleteInitialSwitchInfoDetailsByIds(Long[] ids);

    /**
     * 删除交换机监控信息信息
     * 
     * @param id 交换机监控信息主键
     * @return 结果
     */
    public int deleteInitialSwitchInfoDetailsById(Long id);
    /**
     * 保存交换机流量信息
     * @param initialSwitchInfoDetails
     */
    R<String> autoSaveSwitchTraffic(InitialSwitchInfoDetails initialSwitchInfoDetails);

    /**
     * 计算交换机95带宽值
     * @param queryParam 查询参数实体
     * @return 流量数据列表
     */
    void calculateSwitch95BandwidthDaily(InitialSwitchInfoDetails queryParam, String dailyStartTime, String dailyEndTime, String calculationMode);

    /**
     * 重新计算交换机95带宽值
     * @param epsNodeBandwidth 95带宽值收益详情
     * @param dailyStartTime 开始时间
     * @param dailyEndTime 结束时间
     */
    void recalculateSwitch95Bandwidth(EpsNodeBandwidth epsNodeBandwidth, String dailyStartTime, String dailyEndTime, String calculationMode);

    /**
     * 获取交换机相关数据
     * @param epsNodeBandwidth
     * @return
     */
    List<InitialSwitchInfoDetails> getRelevantSwitch(EpsNodeBandwidth epsNodeBandwidth, String dailyStartTime, String dailyEndTime);
    /**
     * 当前在线交换机接收带宽总流量
     * @return
     */
    BigDecimal sumTrafficBySwitch();

    /**
     * 图形分析-95带宽值mbps/日 v1.1
     * @param initialSwitchInfoDetails
     * @return
     */
    List<Map<String, Object>> getGraphicalAnalysisDaily(InitialSwitchInfoDetails initialSwitchInfoDetails);

    /**
     * 图形分析-95带宽值mbps/月 v1.1
     * @param initialSwitchInfoDetails
     * @return
     */
    List<Map<String, Object>> getGraphicalAnalysisMonthy(InitialSwitchInfoDetails initialSwitchInfoDetails);
}
