package com.fuyuanshen.app.controller.device.bjq;

import com.fuyuanshen.app.domain.vo.AppDeviceHBY100JDetailVo;
import com.fuyuanshen.common.core.domain.R;
import com.fuyuanshen.common.web.core.BaseController;
import com.fuyuanshen.web.service.device.DeviceHBY100JBizService;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * HBY100J设备控制类
 */
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/app/hby100j/device")
public class AppDeviceHBY100JController extends BaseController {

    private final DeviceHBY100JBizService deviceHBY100JBizService;


    /**
     * 获取设备详细信息
     *
     * @param id 主键
     */
    @GetMapping("/{id}")
    public R<AppDeviceHBY100JDetailVo> getInfo(@NotNull(message = "主键不能为空")
                                             @PathVariable Long id) {
        return R.ok(deviceHBY100JBizService.getInfo(id));
    }

    /**
     * 更新语音
     */
    @PostMapping("/updateVoice")
    public R<Void> updateVoice(@RequestBody HBY100JUpdateVoiceDto dto) {
        deviceHBY100JBizService.updateVoice(dto);
        return R.ok();
    }

    /**
     * 强制报警
     *
     */

    @PostMapping("/forceAlarmActivation")
    public R<Void> forceAlarmActivation(@RequestBody HBY100JForceAlarmActivationDto bo) {
        deviceHBY100JBizService.forceAlarmActivation(bo);
        return R.ok();
    }

    /**
     * 语音播报
     *
     */
    @PostMapping("/voiceBroadcast")
    public R<Void> voiceBroadcast(@RequestBody HBY100JVoiceBroadcastDto params) {
        deviceHBY100JBizService.voiceBroadcast(params);
        return R.ok();
    }


    @Data
    public static class HBY100JVoiceBroadcastDto {

        /**
         * 设备ID
         */
        Long deviceId;
        /**
         * 0 关闭, 1开启
         */
        private Integer voiceBroadcast;

    }

    /**
     * 爆闪模式
     */
    @PostMapping("/strobeMode")
    public R<Void> strobeMode(@RequestBody HBY100JStrobeModeDto params) {
        deviceHBY100JBizService.strobeMode(params);
        return R.ok();
    }


    /**
     * 灯光调节
     */
    @PostMapping("/lightAdjustment")
    public R<Void> lightAdjustment(@RequestBody HBY100JLightAdjustmentDto params) {
        deviceHBY100JBizService.lightAdjustment(params);
        return R.ok();
    }


    /**
     * 爆闪频率
     * 说明：
     *
     * 1、依据交易所惯例，每手为一张标准合约。
     *
     * 2、客户期货账户实际手续费收取情况以中国期货市场监控中心投资者查询系统交易结算单为准。
     *
     * 3、我公司有权根据新的情况（如新品种上市、交易所调整等）通过我公司网站公告等方式确定或调整客户的交易手续费收取标准，建议客户及时查询相关公告，并以中国期货市场监控中心发布的交易结算单记载事项为准。
     *
     * 4、白色表示期货品种是双边收取，平今仓收取手续费；
     *    黄色表示期货品种有单边优惠，平今仓免收手续费；
     *    红色表示品种或部分合约手续费平今仓高收；
     *    渐变色表示品种的相关合约，有部分合约有单边优惠，平今仓免收手续费，有部分合约是平今高收。
     */
    @PostMapping("/strobeFrequency")
    public R<Void> strobeFrequency(@RequestBody HBY100JStrobeFrequencyDto params) {
        deviceHBY100JBizService.strobeFrequency(params);
        return R.ok();
    }

    /**
     * 修改音量
     */
    @PostMapping("/updateVolume")
    public R<Void> updateVolume(@RequestBody HBY100JUpdateVolumeDto params) {
        deviceHBY100JBizService.updateVolume(params);
        return R.ok();
    }

    @Data
    public static class HBY100JUpdateVoiceDto {

        private Long id;

    }

    @Data
    public static class HBY100JForceAlarmActivationDto {

        /**
         * 设备ID
         */
        List<Long> deviceIds;
        /**
         * 0 关闭, 1开启
         */
        private Integer voiceStrobeAlarm;
        /**
         * 0 公安,1消防,2应急,3交警，4 市政，5 铁路，6 医疗，7语音
         */
        private Integer mode;

    }

    @Data
    public static class HBY100JUpdateVolumeDto{
        /**
         * 设备ID
         */
        private Long deviceId;
        /**
         * "volume": 1-100(app端可根据需求把40作为低音量, 70作为中音量，100作为高音量)
         */
        private Integer volume;

    }

    @Data
    public static class HBY100JStrobeFrequencyDto{
        /**
         * 设备ID
         */
        private Long deviceId;
        /**
         * "frequency": 1-12
         */
        private Integer frequency;

    }

    @Data
    public static class HBY100JLightAdjustmentDto{
        /**
         * 设备ID
         */
        private Long deviceId;

        /**
         * 亮度值0-100
         */
        private Integer brightness;
//        /**
//         * 红色LED亮度值0-100
//         */
//        private Integer red;
//
//        /**
//         * 蓝色LED亮度值0-100
//         */
//        private Integer blue;
//
//        /**
//         * 黄色LED亮度值0-100
//         */
//        private Integer yellow;

    }
    @Data
    public static class HBY100JStrobeModeDto{

        /**
         * 设备ID
         */
        private Long deviceId;
        /**
         * 0 关闭 1 开启
         */
        private Integer enable;

        /**
         * 0 红色爆闪，1 蓝色爆闪，2 黄色爆闪，3，红色顺时针旋转爆闪，4黄色顺时针旋转爆闪，5，红蓝顺时针旋转爆闪，6 红蓝交替爆闪
         */
        private Integer mode;
    }
}
