package com.yfd.platform.modules.auxcontrol.controller;

import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yfd.platform.annotation.Log;
import com.yfd.platform.config.ResponseResult;
import com.yfd.platform.modules.auxcontrol.domain.MeterDeviceRequest;
import com.yfd.platform.modules.auxcontrol.domain.MeterDevice;
import com.yfd.platform.modules.auxcontrol.service.IMeterDeviceService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 变电站二次设备中的智能仪表监控设备 前端控制器
 * </p>
 *
 * @author zhengsl
 * @since 2025-04-23
 */
@RestController
@RequestMapping("/auxcontrol/meter-device")
@Api(value = "MeterDeviceController", tags = "变电站二次设备中的智能仪表监控设备")
public class MeterDeviceController {

    @Resource
    private IMeterDeviceService meterDeviceService;

    /**********************************
     * 用途说明: 分页查询变电站辅控设备
     * 参数说明
     * deviceName  设备名称
     * deviceModel 设备型号
     * deviceType  设备类型
     * status      设备状态
     * systemcode  系统编号
     * pageNum 当前页
     * 返回值说明: com.yfd.platform.config.ResponseResult 返回分页查询结果
     ***********************************/
    @GetMapping("/page")
    @ApiOperation("分页查询变电站辅控设备")
    public ResponseResult getDevicePage(String stationId, String deviceName, String deviceModel, String deviceType,
                                        String status,
                                        String systemcode, Page<MeterDevice> page) {
        //参数校验  系统编号不能为空
        if (systemcode == null) {
            return ResponseResult.error("参数为空");
        }
        //分页查询
        Page<MeterDevice> devicePage = meterDeviceService.getDevicePage(stationId,deviceName, deviceModel, deviceType, status,
                systemcode, page);
        return ResponseResult.successData(devicePage);
    }

    @GetMapping("/getMeterDeviceByCode")
    @ApiOperation("根据系统编号查询设备")
    public ResponseResult getMeterDeviceByCode(String stationId, String systemCode) {
        List<Map<String, Object>> meterDeviceList = meterDeviceService.getMeterDeviceByCode(stationId, systemCode);
        return ResponseResult.successData(meterDeviceList);
    }

    /***********************************
     * 用途说明：新增变电站辅控设备信息
     * 参数说明
     * device     变电站辅控设备
     * 返回值说明:  com.yfd.platform.config.ResponseResult 返回新增成功或者失败
     ***********************************/
    @Log(module = "综合辅控系统", value = "新增变电站辅控设备信息！", type = "1")
    @PostMapping("/addMeterDevice")
    @ApiOperation("新增变电站辅控设备信息")
    public ResponseResult addMeterDevice(@RequestBody MeterDevice meterDevice) {
        //对象不能为空
        if (ObjectUtil.isEmpty(meterDevice)) {
            return ResponseResult.error("参数为空");
        }
        //新增 通过boolean类型校验成功失败
        boolean isOK = meterDeviceService.addMeterDevice(meterDevice);
        if (isOK) {
            return ResponseResult.success();
        } else {
            return ResponseResult.error();
        }
    }

    /**********************************
     * 用途说明: 修改变电站辅控设备信息
     * 参数说明  substation 变电站信息
     * 返回值说明: com.yfd.platform.config.ResponseResult 返回修改成功或者失败
     ***********************************/
    @Log(module = "数据变电站辅控设备", value = "修改变电站辅控设备信息", type = "1")
    @PostMapping("/updateMeterDevice")
    @ApiOperation("修改变电站辅控设备信息")
    public ResponseResult updateMeterDevice(@RequestBody MeterDevice meterDevice) {
        //对象不能为空 主键id不能为空
        if (ObjectUtil.isEmpty(meterDevice)) {
            return ResponseResult.error("参数为空");
        }
        boolean isOK = meterDeviceService.updateMeterDevice(meterDevice);
        if (isOK) {
            return ResponseResult.success();
        } else {
            return ResponseResult.error();
        }
    }

    /**********************************
     * 用途说明: 批量修改变电站辅控设备信息
     * 参数说明
     * ids           变电站辅控设备id数组
     * netdeviceIp   对应网关设备IP
     * 返回值说明: com.yfd.platform.config.ResponseResult 返回修改成功或者失败
     ***********************************/
    @Log(module = "数据变电站辅控设备", value = "批量修改变电站辅控设备信息", type = "1")
    @PostMapping("/batchUpdateMeterDeviceIp")
    @ApiOperation("批量修改变电站辅控设备信息")
    public ResponseResult batchUpdateMeterDeviceIp(@RequestBody MeterDeviceRequest batchUpdateIpRequest) {

        if (batchUpdateIpRequest.getIds() == null || batchUpdateIpRequest.getIds().size() <= 0) {
            return ResponseResult.error("参数为空");
        }
        if (StrUtil.isBlank(batchUpdateIpRequest.getIp())) {
            return ResponseResult.error("参数为空");
        }
        boolean isOk = meterDeviceService.batchUpdateDeviceIp(batchUpdateIpRequest.getIds(), batchUpdateIpRequest.getIp());
        if (isOk) {
            return ResponseResult.success();
        } else {
            return ResponseResult.error();
        }
    }

    /**********************************
     * 用途说明: 根据ID删除变电站信息
     * 参数说明  id 变电站辅控设备ID
     * 返回值说明: com.yfd.platform.config.ResponseResult 返回删除成功或者失败
     ***********************************/
    @Log(module = "数据变电站辅控设备", value = "根据ID删除变电站辅控设备信息", type = "1")
    @PostMapping("/deleteMeterDeviceById")
    @ApiOperation("根据ID删除变电站辅控设备信息")
    public ResponseResult deleteMeterDeviceById(@RequestParam String id) {
        if (StrUtil.isBlank(id)) {
            return ResponseResult.error("参数为空");
        }
        boolean isOK = meterDeviceService.removeById(id);
        if (isOK) {
            return ResponseResult.success();
        } else {
            return ResponseResult.error();
        }
    }

    /**********************************
     * 用途说明: 批量删除变电站辅控设备信息
     * 参数说明  ids 变电站辅控设备id数组
     * 返回值说明: com.yfd.platform.config.ResponseResult 返回批量删除成功或失败
     ***********************************/
    @Log(module = "数据变电站区域", value = "批量删除变电站辅控设备信息", type = "1")
    @PostMapping("/deleteDeviceByIds")
    @ApiOperation("批量删除变电站辅控设备信息")
    public ResponseResult deleteDeviceByIds(@RequestParam String ids) {
        if (StrUtil.isBlank(ids)) {
            return ResponseResult.error("参数为空");
        }
        List<String> idList = StrUtil.split(ids, ",");
        boolean isOk = meterDeviceService.removeByIds(idList);
        if (isOk) {
            return ResponseResult.success();
        } else {
            return ResponseResult.error();
        }
    }

}
