package com.skr.mdm.api.equipment.service;

import com.skr.mdm.bean.qo.BaseQueryQO;
import com.skr.mdm.bean.qo.equipment.EquipmentAddUpdateQO;
import com.skr.mdm.bean.qo.equipment.EquipmentPageQO;
import com.skr.mdm.dto.LoginAdminDTO;
import com.skr.mdm.result.ResponseResult;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

public interface EquipmentService {

    /**
     * 设备列表
     *
     * @param equipmentPageQO 请求对象
     * @param loginAdminDTO   当前管理员
     * @return 响应对象
     */
    ResponseResult listEquipment(EquipmentPageQO equipmentPageQO, LoginAdminDTO loginAdminDTO);

    /**
     * 添加设备
     *
     * @param equipmentAddUpdateQO 请求对象
     * @param loginAdminDTO        当前管理员
     * @return 响应对象
     */
    ResponseResult addEquipment(EquipmentAddUpdateQO equipmentAddUpdateQO, LoginAdminDTO loginAdminDTO);

    /**
     * 编辑设备
     *
     * @param equipmentAddUpdateQO 请求对象
     * @param loginAdminDTO        当前管理员
     * @return 响应对象
     */
    ResponseResult updateEquipment(EquipmentAddUpdateQO equipmentAddUpdateQO, LoginAdminDTO loginAdminDTO);

    /**
     * 删除设备
     *
     * @param equipmentIdList 设备ID
     * @param loginAdminDTO   当前管理员
     * @return 响应对象
     */
    ResponseResult deleteEquipment(List<Integer> equipmentIdList, LoginAdminDTO loginAdminDTO);

    /**
     * 设备导入
     *
     * @param file          导入文件
     * @param loginAdminDTO 当前管理员
     * @return 响应对象
     * @throws IOException e
     */
    ResponseResult importEquipment(MultipartFile file, LoginAdminDTO loginAdminDTO) throws Exception;

    /**
     * 设备导出
     * @param deptIdList 部门ID集合
     * @param loginAdminDTO 当前管理员
     * @param response response
     * @throws IOException e
     */
    void exportEquipment(List<Integer> deptIdList, LoginAdminDTO loginAdminDTO, HttpServletResponse response) throws IOException;

    /**
     * 设备绑定/解绑
     *
     * @param equipmentId   设备ID
     * @param state         状态（0：绑定 1：解绑）
     * @param loginAdminDTO 当前管理员
     * @return 响应对象
     */
    ResponseResult updateBoundState(Integer equipmentId, Integer state, LoginAdminDTO loginAdminDTO);

    /**
     * 机卡解绑
     *
     * @param equipmentId   设备ID
     * @param loginAdminDTO 当前管理员
     * @return 响应对象
     */
    ResponseResult cardUnbind(Integer equipmentId, LoginAdminDTO loginAdminDTO);

    /**
     * 生成离线解锁码
     * @param offLineUnlockCode 离线解锁码
     * @param loginAdminDTO
     * @return
     */
    ResponseResult offLineUnlockCode(String offLineUnlockCode, LoginAdminDTO loginAdminDTO);
}