package com.bonus.material.device.service;


import com.bonus.common.biz.domain.BmCompanyInfo;
import com.bonus.common.core.web.domain.AjaxResult;
import com.bonus.material.devchange.domain.MaDevInfo;
import com.bonus.material.devchange.domain.MaDevInfoXlsx;
import com.bonus.material.devConfig.domain.EquipmentProperty;
import com.bonus.material.device.domain.DevInfo;
import com.bonus.material.device.domain.EquipmentImportDTO;
import com.bonus.material.device.domain.dto.DevInfoImpDto;
import com.bonus.material.device.domain.dto.InfoMotionDto;
import com.bonus.material.device.domain.vo.DevInfoVo;
import com.bonus.material.device.domain.vo.DevMergeVo;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

/**
 * 设备信息Service接口
 *
 * @author syruan
 */
public interface DevMergeService {

    List<DevMergeVo> list(DevMergeVo devInfo);

    List<DevInfoVo> devList(DevInfoVo devInfo);

    AjaxResult addOrder();

    void insertOrderDevReal(String orderId, Long maId);

    AjaxResult submitOrder(DevMergeVo o);

    AjaxResult delOrder(DevMergeVo o);

    AjaxResult checkDevice(DevMergeVo o);

    /**
     * 查询所有一级类型（顶级类型）
     *
     * @return 一级类型列表
     */
    AjaxResult findFirstLevelTypes();


    AjaxResult getSecondToFifthLevelTypes(Long firstLevelId);

    /**
     * 根据一级类型ID查询其下的二、三级类型
     *
     * @param firstLevelId 一级类型ID
     * @return 二、三级类型列表
     */
    AjaxResult findSecondAndThirdLevelTypes(Long firstLevelId);

    /**
     * 根据三级类型ID查询其下的四、五、六级类型
     *
     * @param thirdLevelId 三级类型ID
     * @return 四、五、六级类型列表
     */
    AjaxResult getFourthToSixthLevelTypes(Long thirdLevelId);

    AjaxResult interDevice(MaDevInfo maDevInfo);

    List<MaDevInfo> getDevice(MaDevInfo o);

    List<MaDevInfo> getDeviceByOrderId(MaDevInfo o);

    AjaxResult updateDevice(MaDevInfo maDevInfo);

    AjaxResult importData(List<EquipmentImportDTO> list, String orderId);

    List<String> listAllProfessionNames();

    List<String> listAllManufacturerNames();

    void downloadEmptyFolderZip(HttpServletResponse response,String orderId);

    AjaxResult uploadAndUnzipMultiDeviceZip(MultipartFile zipFile,String orderId);

    /**
     * 查询所有装备类型及其特征项
     * @return Map<装备类型名称, 特征项列表>
     */
    Map<String, List<EquipmentProperty>> getAllTypePropertiesMap();
}
