
export type DeviceType = 'pvg67' | 'pvgplus' | 'rtsp' | 'gb28181';
export type ProtocolType = 'httpflv' | 'websocketflv' | 'hls' | 'webrtc';
export type Streamtype = 'vod' | 'live';

export enum BarItemType {
    BTN = 'btn',
    LABEL = 'label'
}

export enum PlayerMode {
    DESKTOP = 'desktop',
    MOBILE = 'mobile'
}

export interface ToolBarItem {
    type: BarItemType;
    label?: string;
    icon?: string;
    className?: string;
    cmd?: string;
    cb?: Function;
    tip?: string;
}

export interface shapeItem {
    x: number;
    y: number;
}

export interface StreamOpt {
    // user: string; // Pvg/gb登录用户名
    // password: string; // pvg/gb登录密码
    // ip: string; // pvg/gb的 ip
    // port: string; // pvg / gb端口
    // channel: string; // pvg/gb通道号， pvm中的id。pvgplus可在末尾用#传入媒体参数, 包括video、audio、profile, 具体取值： video：H264  H265  MPEG4；audio：AAC G711 G726 G729；profile：CIF  D1  HD 0 1 2 三种媒体参数任意组合，无先后顺序，例如 #D1、#H264#HD#G711、#G711#HD#H264， profile中的0、1、2、...代表主子码流
    aisleId: string; // 通道业务主键
    passage:string // 主/副码流
    title?: string; // 通道名称
    url?: string; // Rtsp的地址
    sipServerId?: string; // 国标网关id
    streamtype?: Streamtype;
    deviceType?: DeviceType;
    protocolType?: ProtocolType;
    protocol: 'ws' | 'wss' | 'hls' | 'hlss'
    isptz?: boolean; // 是否云台控制
    beginTime?: string; // 录像开始时间
    endTime?: string; // 录像结束时间
    vod?: number; // 录像存储类型： 0：服务录像 1~255：设备录像,
    headerToolBar?: Array<ToolBarItem>, // header toolbae
    footerToolBar?: Array<ToolBarItem>, // footer toolbae
    hideHeaderToolBar?: boolean; // 是否隐藏对应工具栏
    hideFooterToolBar?: boolean; // 是否隐藏对应工具栏
    enableWorker?: boolean; // 是否启用web worker,
    workerPath?: 'static/'; // h265 解码文件根相对路径
    isDraw?:boolean,
    shape?:Array<shapeItem>,
    isTalk?:boolean,
    autoTalk?:boolean,
    autoAudio?:boolean,
    dateTime?:string,
    maxRetryTime?: number; // 开流重试次数，最大 3 次
    enableAutoRecover?: boolean; // 是否开启稳定播放后的自动恢复
    maxAutoRecoverCount?: number; // 稳定播放后自动恢复次数，最大 3 次
    stablePlaySeconds?: number; // 进入稳定播放态所需时长，单位秒
 }
export interface ControllerOpt {
    hideTools?: boolean; // 是否隐藏工具栏
}
export const defaultStreamOpt = {
    // user: 'admin',
    passage: '0',
    deviceType: "pvgplus",
    isptz: false,
    // password: "a123456",
    protocolType: "websocketflv",
    protocol: 'ws',
    streamtype: "live",
    footerToolBar: [],
    headerToolBar: [],
    enableWorker: true,
    autoAudio: true,
    isDraw: false,
    isTalk: true,
    enableAutoRecover: true,
};

export const defaultControllerOpt: ControllerOpt = {
    hideTools: true
};
export const createDefaultStreamOpt = () => {
    return Object.assign({}, defaultStreamOpt);
}
export const createDefaultControllerOpt = () => {
    return Object.assign({}, defaultControllerOpt);
}
export type StreamSpeed = -3 | -2 | -1| 0 | 1 | 2 | 3;
export interface PTZParam {
    streamId?: string; // 流id
    cmd: number;
    value: number;
}
export enum JPEvent {
    DESTROY = 'destroy',
    INITED = 'inited',
    CREATED = 'created',
    SEEKED = 'seeked',
    PLAY = 'play',
    CANPLAY= 'canPlay',
    PAUSE = 'pause',
    ERROR = 'error',
    CLOSE = 'close',
    FullScreen = 'fullScreen',
    SCREENSHOT = 'screenshot',
}

export enum StyleSize {
    XS = 'xs',
    SM = 'sm',
    MD = 'md',
    LG = 'lg',
}
export enum Direction {
    TL = 1,
    TR = 2,
    DR = 3,
    DL = 4,
    NAN = 0
}
