namespace SHH.CameraSdk.HikFeatures;

public class HikRebootProvider : IRebootFeature
{
    private readonly IHikContext _context;

    public HikRebootProvider(IHikContext context)
    {
        _context = context;
    }

    public async Task RebootAsync()
    {
        // 1. 检查登录状态
        int userId = _context.GetUserId();
        if (userId < 0) throw new InvalidOperationException("设备未登录或离线，无法发送重启指令");

        // 2. 执行 SDK 调用
        await Task.Run(() =>
        {
            bool result = HikNativeMethods.NET_DVR_RebootDVR(userId);

            if (!result)
            {
                uint err = HikNativeMethods.NET_DVR_GetLastError();
                throw new Exception($"重启指令发送失败，错误码: {err}");
            }
        });

        // 3. 注意：
        // 重启指令发送成功后，设备会断开网络。
        // 宿主类(HikVideoSource)的保活机制(KeepAlive)会检测到断线，
        // 并自动开始尝试重连，直到设备重启完成上线。
        // 所以这里我们不需要手动断开连接，交给底层自愈机制即可。
    }
}