package com.usky.cdi.controller;

import com.usky.cdi.service.impl.SipRtspPushService;
import lombok.RequiredArgsConstructor;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;

/**
 * GB28181 推流（海康摄像机模式）：手动注册设备，传入 RTSP 后等平台点播。
 */
@RestController
@RequestMapping("/api/sip")
@RequiredArgsConstructor
@ConditionalOnProperty(prefix = "sip.client", name = "enabled", havingValue = "true")
public class SipPushController {

    private final SipRtspPushService sipRtspPushService;

    /** 手动注册设备到 GB28181 平台（deviceId 动态传入，20 位数字） */
    @PostMapping("/device/register")
    public Map<String, Object> registerDevice(
            @RequestParam String deviceId,
            @RequestParam(required = false) String channelId) {
        return sipRtspPushService.registerDevice(deviceId, channelId);
    }

    /** 手动注销设备（REGISTER Expires=0） */
    @PostMapping("/device/unregister")
    public Map<String, Object> unregisterDevice() {
        return sipRtspPushService.unregisterDevice();
    }

    /**
     * 绑定 RTSP 视频源并等待平台 INVITE 推流（需先注册设备）。
     * 调用后请在 GB28181 平台对设备发起「实时预览」。
     */
    @PostMapping("/push")
    public Map<String, Object> pushRtsp(
            @RequestParam String rtspUrl,
            @RequestParam(required = false) Integer durationSeconds) {
        return sipRtspPushService.pushRtspStream(rtspUrl, durationSeconds);
    }

    /** 设备注册状态（类似摄像机 GB28181 在线状态） */
    @GetMapping("/device/status")
    public Map<String, Object> deviceStatus() {
        return sipRtspPushService.deviceStatus();
    }
}
