package com.skr.mdm.api.template;

import com.skr.mdm.dto.LoginAdminDTO;
import com.skr.mdm.result.ResponseResult;
import com.skr.mdm.bean.qo.BaseStrategyQO;

import java.util.List;

/**
 * 默认策略功能接口
 *
 * @author nfq
 * @date 2022-07-14 11:39
 */
public interface DefaultStrategyService {

    /**
     * 获取策略详情
     *
     * @param strategyId 策略ID
     * @return 策略详情VO
     */
    ResponseResult strategyInfo(Integer strategyId);

    /**
     * 策略下发
     *
     * @param strategyIdList 策略ID集合
     * @param baseStrategyQO 策略通用对象
     * @param loginAdminDTO  当前管理员信息
     * @return ResponseResult
     */
    ResponseResult issuedStrategy(List<Integer> strategyIdList, BaseStrategyQO baseStrategyQO, LoginAdminDTO loginAdminDTO);

    /**
     * 添加策略
     *
     * @param operationObject   策略创建对象
     * @param loginAdminDTO 当前管理员信息
     * @return ResponseResult
     */
    ResponseResult addStrategy(Object operationObject, LoginAdminDTO loginAdminDTO);

    /**
     * 编辑策略
     *
     * @param operationObject   策略编辑对象
     * @param loginAdminDTO 当前管理员信息
     * @return ResponseResult
     */
    ResponseResult updateStrategy(Object operationObject, LoginAdminDTO loginAdminDTO);

    /**
     * 删除策略
     *
     * @param strategyIdList 策略ID集合
     * @param loginAdminDTO  当前管理员信息
     * @return ResponseResult
     */
    ResponseResult deleteStrategy(List<Integer> strategyIdList, LoginAdminDTO loginAdminDTO);

    /**
     * 策略启用禁用
     *
     * @param strategyId    策略ID集合
     * @param state         策略状态（2：启用 3：禁用）
     * @param loginAdminDTO 当前管理员信息
     * @return ResponseResult
     */
    ResponseResult updateStrategyState(Integer strategyId, Integer state, LoginAdminDTO loginAdminDTO);


    /**
     * 策略作用人
     *
     * @param queryObject 策略作用人分页检索对象
     * @return 策略作用人VO
     */
    ResponseResult listStrategyUser(Object queryObject);

    /**
     * 删除策略作用人
     *
     * @param strategyId      策略ID
     * @param equipmentIdList 需要删除的设备ID集合
     * @param loginAdminDTO   当前管理员信息
     * @return ResponseResult
     */
    ResponseResult deleteStrategyUser(Integer strategyId, List<Integer> equipmentIdList, LoginAdminDTO loginAdminDTO);
}
