package com.usky.park.controller.web;


import com.usky.common.core.bean.ApiResult;
import com.usky.common.core.bean.CommonPage;
import com.usky.common.core.utils.poi.ExcelUtil;
import com.usky.park.domain.DataRealTime;
import com.usky.park.service.DataRealTimeService;
import com.usky.park.service.DmpDeviceService;
import com.usky.park.service.vo.DeviceHistoryDataExportVO;
import com.usky.park.service.vo.DmpDeviceVO;
import com.usky.park.service.vo.HistoryAttributeVO;
import org.bouncycastle.cert.ocsp.Req;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

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

/**
 * <p>
 * 设备信息表 前端控制器
 * </p>
 *
 * @author zyj
 * @since 2023-03-30
 */
@RestController
@RequestMapping("/dmpDevice")
public class DmpDeviceController {
    @Autowired
    private DmpDeviceService deviceService;

    /**
     * 设备管理-设备列表查询
     *
     * @param deviceName 设备名称
     * @param installAddress 设备安装位置
     * @param deviceType 设备类型（501、监控系统  502、门禁系统  503、梯控系统  504、机房系统  509、环境系统  510、照明系统）
     * @param deviceStatus  设备状态（0 离线 1 在线）
     * @param doorStatus  门禁门状态（1 开门状态 2 关门状态）
     * @param switchStatus  照明开关状态（0 关闭 1 打开）
     * @param startDate 开始时间  格式 yyyy-MM-dd HH:mm:ss
     * @param endDate  结束时间  格式 yyyy-MM-dd HH:mm:ss
     * @param pageNum  当前页
     * @param pageSize  每页条数
     * @return
     */
    @GetMapping("dmpDeviceList")
    public ApiResult<CommonPage<DmpDeviceVO>> dmpDeviceList(@RequestParam(value = "deviceName",required = false) String deviceName,
                                                            @RequestParam(value = "installAddress",required = false) String installAddress,
                                                            @RequestParam(value = "deviceType",required = false) Integer deviceType,
                                                            @RequestParam(value = "deviceStatus",required = false) String deviceStatus,
                                                            @RequestParam(value = "doorStatus",required = false) String doorStatus,
                                                            @RequestParam(value = "switchStatus",required = false) String switchStatus,
                                                            @RequestParam(value = "startDate",required = false) String startDate,
                                                            @RequestParam(value = "endDate",required = false) String endDate,
                                                            @RequestParam(value = "pageNum", required = false, defaultValue = "1") Integer pageNum,
                                                            @RequestParam(value = "pageSize", required = false, defaultValue = "10") Integer pageSize){
        return ApiResult.success(deviceService.dmpDeviceList(deviceName,installAddress,deviceType,deviceStatus,doorStatus,switchStatus,startDate,endDate,pageNum,pageSize));
    }

    /**
     * 数据中心-机房系统、环境系统、照明系统心跳列表查询接口
     *
     * @param deviceName 设备名称
     * @param installAddress 设备安装位置
     * @param deviceType 设备类型（501、监控系统  502、门禁系统  503、梯控系统  504、机房系统  509、环境系统  510、照明系统）
     * @param switchStatus 照明开关状态（0 关闭 1 打开）
     * @param pageNum  当前页
     * @param pageSize  每页条数
     * @return
     */
    @GetMapping("deviceCurrentDataList")
    public ApiResult<CommonPage<Object>> deviceCurrentDataList(@RequestParam(value = "deviceName",required = false) String deviceName,
                                                               @RequestParam(value = "installAddress",required = false) String installAddress,
                                                               @RequestParam(value = "deviceType") Integer deviceType,
                                                               @RequestParam(value = "switchStatus",required = false) Integer switchStatus,
                                                               @RequestParam(value = "pageNum", required = false, defaultValue = "1") Integer pageNum,
                                                               @RequestParam(value = "pageSize", required = false, defaultValue = "10") Integer pageSize){
        return ApiResult.success(deviceService.deviceCurrentDataList(deviceName,installAddress,deviceType,switchStatus,pageNum,pageSize));
    }

    /**
     * 数据中心-设备历史数据全量导出
     *
     * @param deviceType  设备类型（501、监控系统  502、门禁系统  503、梯控系统  504、机房系统  509、环境系统  510、照明系统）
     * @param startDate  开始时间  格式 yyyy-MM-dd HH:mm:ss
     * @param endDate  结束时间  格式 yyyy-MM-dd HH:mm:ss
     * @return
     */
    @GetMapping("deviceHistoryDataListExport")
    void deviceHistoryDataListExport(@RequestParam(value = "deviceType") Integer deviceType,
                                                                           @RequestParam(value = "startDate") String startDate,
                                                                           @RequestParam(value = "endDate") String endDate, HttpServletResponse response) throws IOException {
        String name = "环境设备_"+startDate.substring(0,10)+"_"+endDate.substring(0,10);
        List<DeviceHistoryDataExportVO> list = deviceService.deviceHistoryDataListExport(deviceType,startDate,endDate);
        ExcelUtil<DeviceHistoryDataExportVO> util = new ExcelUtil<DeviceHistoryDataExportVO>(DeviceHistoryDataExportVO.class);
        util.exportExcel(response,list,name,name);
    }


    /**
     * 数据中心-机房系统、环境系统、照明系统心跳历史数据列表查询接口
     *
     * @param deviceId 设备Id
     * @param deviceType 设备类型（501、监控系统  502、门禁系统  503、梯控系统  504、机房系统  509、环境系统  510、照明系统）
     * @param deviceAttribute 设备属性
     * @param startDate 开始时间  格式 yyyy-MM-dd HH:mm:ss
     * @param endDate  结束时间  格式 yyyy-MM-dd HH:mm:ss
     * @return
     */
    @GetMapping("deviceHistoryDataList")
    public ApiResult<List<HistoryAttributeVO>> deviceHistoryDataList(@RequestParam(value = "deviceId") String deviceId,
                                                                     @RequestParam(value = "deviceType") Integer deviceType,
                                                                     @RequestParam(value = "deviceAttribute") List<String> deviceAttribute,
                                                                     @RequestParam(value = "startDate") String startDate,
                                                                     @RequestParam(value = "endDate") String endDate){
        return ApiResult.success(deviceService.deviceHistoryDataList(deviceId,deviceType,deviceAttribute,startDate,endDate));
    }

    /**
     * 数据中心-环境系统楼宇健康监测查询
     *
     * @return
     */
    @GetMapping("evBuildHealth")
    public ApiResult<Map<String,Object>> evBuildHealth(){
        return ApiResult.success(deviceService.evBuildHealth());
    }


}

