package com.red.circle.live.app.listener.agora.callback;

import com.red.circle.tool.core.json.JacksonUtils;
import java.io.Serial;
import java.io.Serializable;
import lombok.Data;

/**
 * <a
 * href="https://doc.shengwang.cn/api-ref/rtc/restful/channel-management/ncs-events#101">频道webhook</a>
 *
 * @author pengliang on 2023/12/29
 */
@Data
public class AgoraChannelWebhook implements Serializable {

  @Serial
  private static final long serialVersionUID = 1L;

  /**
   * 通知 ID，标识来自声网业务服务器的一次事件通知.
   */
  private String noticeId;

  /**
   * 业务 ID。值为 1 表示实时通信业务.
   */
  private Integer productId;

  /**
   * 通知的事件类型.
   */
  private Integer eventType;

  /**
   * 声网消息服务器向你的服务器发送事件通知的 Unix 时间戳 (ms)。通知重试时该值会更新.
   */
  private Long notifyMs;

  /**
   * 会话 ID.
   */
  private String sid;

  /**
   * 通知事件的具体内容.
   */
  private Object payload;

  public static AgoraChannelWebhook serializable(byte[] body) {
    if (body.length == 0) {
      return null;
    }
    return JacksonUtils.readValue(body, AgoraChannelWebhook.class);
  }

  public <T> T toBody(Class<T> clazz) {
    return JacksonUtils.readValue(JacksonUtils.toJson(payload), clazz);
  }

}
