import { FenceDisplayStatus, IsPtz, VideoServiceType, VideoStandardType } from './constant';

export interface CheckedSceneTemplate {
  sceneId: number;
  templateId: number;
}

export interface CameraUrlInfoDTO {
  pushstreamIp: string; // 推流地址(前端播放的地址)
  pushstreamRenderUrl: string; // 渲染推流地址(前端播放的渲染地址)
  m3u8PushstreamIp: string; // ios推流地址(前端播放的地址)
  m3u8PushstreamRenderIp: string; // ios推流地址(前端播放的地址)
  pushstreamIpAbs: string; // 推流地址(前端播放的地址)
  pushstreamRenderUrlAbs: string; //渲染推流地址(前端播放的渲染地址)
  m3u8PushstreamIpAbs: string; //ios推流地址(前端播放的地址)
  m3u8PushstreamRenderIpAbs: string; //ios推流地址(前端播放的地址)
}

export interface PushStreamDTOType {
  videoUrls: CameraUrlInfoDTO;
  imageUrl: string; // 摄像头实时记录的画面
}

// 添加相机/编辑相机
export interface CameraAddItem {
  id?: number; //相机id：编辑时必传
  name: string; // 相机名称
  code: string; // 相机编号、设备ID
  cameraIp?: string; // 相机IP
  cameraPort?: string; //	相机端口
  username?: string; // 用户名
  password?: string; // 密码
  cameraType: string; // 协议类型: haikang/dahua/anxus/huawei
  workshopId: number; // 车间id
  workspaceId: number; // 工位id
  remark?: string; // 描述、备注
  isPtz?: IsPtz; // 相机是否支持移动缩放：0-不支持；1-支持
  onvifPort?: string; // 相机的ONVIF端口号
  sourceType: string; // 添加方式： IP，NVR，RTSP
  rtspUrl?: string; // rtsp地址
  nvrId?: number; // NVR id
  nvrChannel?: string; // NVR通道号
  videoStandard: VideoStandardType; // 视频编码标准，H264, H265
  videoServiceType?: VideoServiceType; // 视频服务类型，TCP, UDP, AUTO
  sceneTemplateList: CheckedSceneTemplate[]; // 场景-模板列表
  version?: number; // 版本
}

/** 相机是否接入平台 */
export enum IntegrationIsActive {
  /** 接入平台 */
  YES = 0,
  /** 未接入平台 */
  NO = 1,
}

/** 根据后端返回的相机详情 */
export interface CameraDetailServer extends CameraAddItem {
  isDisabled?: number; // 状态: 0-启用, 1-禁用
  createdBy?: number; //创建人
  updatedBy?: number; // 更新人
  createdAt?: string; // 创建时间
  updatedAt?: string; // 更新时间
  isDeleted?: number; //0-未删除，大于0(时间戳)-已删除
  tenantId?: number; // 租户ID
  networkingState: number; // 联网状态: 0-启用, 1-禁用
  integrationState: IntegrationIsActive; // 接入状态： 0-启用, 1-禁用
  render?: string; // 渲染选择，无渲染/某个算法
  extra?: string; // 扩展数据
  pushStreamDTO?: PushStreamDTOType;
  companyName?: string; // 公司名称
  workshopName?: string; // 车间场景名称
  workspaceName?: string; // 工位名称
  workspaceCode?: string; // 工位code
  principal?: string; // 工位负责人
  // isDisplayFence: FenceDisplayStatus;

  // TODO:以下字段为V4版本之前本interface所具有，V4接口无以下返回，暂保留
  // /** 相机MAC地址 */
  // cameraMac: string;
  // /** 录制周期 */
  // nvrPeriod: number;
  // /** 录制开始时间 */
  // nvrStartAt: string;
  // /** 录制结束时间 */
  // nvrEndAt: string;
  // /** 分辨率 */
  // resolution: number;
  // // 平台是否显示电子围栏
  // fenceDisplayStatus: FenceDisplayStatus;
}

export interface CameraRangeItem {
  /** 启用IP地址 */
  startIp: string;
  /** 结束IP地址 */
  endIp: string;
  /** 协议类型 */
  cameraType: string;
  /** 相机端口 */
  port?: string;
  /** 用户名 */
  userName?: string;
  /** 密码 */
  password: string;
}

export interface CameraShareItem {
  /** 企业账号 */
  tenantCode: string | undefined;
  toTenantId?: number;
  /** 权限设置 */
  permission: string;
  /** 企业名称 */
  tenantName: string;
  /** 分享时间 */
  time?: string;
  /** 分享的有限期时间 */
  days?: number;
  /** 备注 */
  remark?: string;
  /** 密码 */
  // shareList: CompanyShareItem[];
  //分享的结束时间
  endTime: string;
}
