package org.nl.acs.opc.service;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.nl.acs.opc.domain.Opc;
import org.nl.acs.common.base.PageInfo;
import org.nl.acs.common.base.CommonService;
import org.nl.acs.opc.service.dto.OpcDto;
import org.nl.acs.opc.service.dto.OpcQueryParam;
import org.springframework.data.domain.Pageable;

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

/**
 * @author jiaolm
 * @date 2023-05-09
 */
public interface OpcService extends CommonService<Opc> {

    static final String CACHE_KEY = "opc";

    /**
     * 查询数据分页
     *
     * @param query    条件
     * @param pageable 分页参数
     * @return PageInfo<OpcDto>
     */
    PageInfo<OpcDto> queryAll(OpcQueryParam query, Pageable pageable);

    /**
     * 查询所有数据不分页
     *
     * @param query 条件参数
     * @return List<OpcDto>
     */
    List<OpcDto> queryAll(OpcQueryParam query);

    /**
     * 根据ID查询
     *
     * @param id ID
     * @return Opc
     */
    Opc getById(String id);

    /**
     * 根据ID查询
     *
     * @param id ID
     * @return OpcDto
     */
    OpcDto findById(String id);

    /**
     * 插入一条新数据。
     * @param resources
     * @return
     */
    int insert(OpcDto resources);

    /**
     * 编辑一条数据
     * @param resources
     * @return
     */
    int updateById(OpcDto resources);

    /**
     * 删除数据
     * @param id
     * @return
     */
    int removeById(String id);

    /**
     * 根据多个id删除
     * @param ids
     * @return
     */
    int removeByIds(Set<String> ids);

    /**
     * 导出数据
     * @param all 待导出的数据
     * @param response /
     * @throws IOException /
     */
    // void download(List<OpcDto> all, HttpServletResponse response) throws IOException;

    /**
     * 查询数据分页
     *
     * @param whereJson 条件
     * @param page      分页参数
     * @return Map<String, Object>
     */
    Map<String, Object> queryAll(Map whereJson, Pageable page);

    /**
     * 查询所有数据不分页
     *
     * @param whereJson 条件参数
     * @return List<OpcDto>
     */
    List<OpcDto> queryAll(Map whereJson);

    /**
     * 根据ID查询
     *
     * @param opc_id ID
     * @return Opc
     */
//    OpcDto findById(String opc_id);

    /**
     * 根据编码查询
     *
     * @param code code
     * @return Opc
     */
    OpcDto findByCode(String code);

    /**
     * 编辑
     *
     * @param dto /
     */
    void update(OpcDto dto);

    /**
     * 多选删除
     *
     * @param ids /
     */
    void deleteAll(String[] ids);

    /**
     * 导出数据
     *
     * @param dtos     待导出的数据
     * @param response /
     * @throws IOException /
     */
    void download(List<OpcDto> dtos, HttpServletResponse response) throws IOException;

    /**
     * 前端OPC下拉选列表
     *
     * @return
     */
    JSONArray selectList();


    /**
     * 根据ID查询
     *
     * @param opc_id ID
     * @return Opc
     */
    OpcDto queryServerPlc(String opc_id);

    /**
     * 查询
     *
     * @param whereJson 条件
     * @return Map<String, String>
     */
    HashMap<String, String> getmeteal(Map whereJson);

    /**
     * 创建PLC
     *
     * @param map map
     */
    void createPLC(Map map);

    /**
     * 删除plc
     * @param map
     */
    void delPLC(Map map);

    /**
     * 编辑plc
     * @param json
     */
    void editPLC(JSONObject json);
}
