package edu.whut.trigger.http;
import edu.whut.api.IDCCService;
import edu.whut.api.response.Response;
import edu.whut.types.enums.ResponseCode;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RTopic;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

/**
 * 动态配置管理
 */
@Slf4j
@RestController()
@CrossOrigin("*")
@RequestMapping("/api/v1/gbm/dcc/")
@RequiredArgsConstructor
public class DCCController implements IDCCService {

    private final RTopic dccTopic;

    /**
     * 动态值变更
     * curl http://localhost:8091/api/v1/gbm/dcc/update_config?key=downgradeSwitch&value=1
     * curl http://localhost:8091/api/v1/gbm/dcc/update_config?key=cutRange&value=0
     * curl http://127.0.0.1:8091/api/v1/gbm/dcc/update_config?key=rateLimiterSwitch&value=close
     */
    @GetMapping("update_config")
    @Override
    public Response<Boolean> updateConfig(@RequestParam String key,
                                          @RequestParam String value) {
        try {
            log.info("DCC 动态配置值变更 key:{} value:{}", key, value);
            dccTopic.publish(key + "," + value);
            return Response.<Boolean>builder()
                    .code(ResponseCode.SUCCESS.getCode())
                    .info(ResponseCode.SUCCESS.getInfo())
                    .build();
        } catch (Exception e) {
            log.error("DCC 动态配置值变更失败 key:{} value:{}", key, value, e);
            return Response.<Boolean>builder()
                    .code(ResponseCode.UN_ERROR.getCode())
                    .info(ResponseCode.UN_ERROR.getInfo())
                    .build();
        }
    }

}
