export type TPreset = {
  token: string;
  name: string;
  x: number;
  y: number;
  z: number;
};
export type TMovementSettings = {
  speed: number;
  precision: number;
};

export type Component = {
  id?: string;
  style?: string;

  is_ptz_connected?: boolean;
  is_ptz_panel_opened?: boolean;
  live_uri: string;
  media_type?: "hls" | "webrtc" | "auto" | "whep" | "";
  presets?: TPreset[];
  position?:
    | "top"
    | "right-bottom"
    | "left-bottom"
    | "bottom"
    | "right-top"
    | "left-top";
  current_preset?: string;
  is_home?: boolean;
  configuration?: {
    joystick?: boolean;
    presets?: boolean;
    addPreset?: boolean;
    switchPreset?: boolean;
    deletePreset?: boolean;
    home?: boolean;
    zoom?: {
      in?: boolean;
      out?: boolean;
    };
    pan?: boolean;
    tilt?: boolean;
    clickToCenter?: boolean;
    settings?: boolean;
  };
};
export type CardinalDirection =
  | "C"
  | "N"
  | "S"
  | "NE"
  | "SE"
  | "NW"
  | "SW"
  | "NO"
  | "SO"
  | "W"
  | "O";

export type Events = {
  initVideo: { id: string; time: Date; htmlVideoElement: any };
  panelMove: { id: string; opened: boolean };

  goToHome: { movementSettings: TMovementSettings; id: string; time: Date };
  goToSelectedArea: {
    movementSettings: TMovementSettings;
    id: string;
    top: number;
    left: number;
    width: number;
    height: number;
    htmlVideoElementWidth: number;
    htmlVideoElementHeight: number;
    time: Date;
  };

  setPreset: { id: string; time: Date };
  goToPreset: TPreset & {
    playerId: string;
    movementSettings: TMovementSettings;
    time: Date;
  };
  deletePreset: TPreset & { playerId: string; time: Date };

  zoomAction: {
    movementSettings: TMovementSettings;
    direction: "in" | "out";
    id: string;
    time: Date;
  };

  sendJoystickPosition: {
    movementSettings: TMovementSettings;
    x: number;
    y: number;
    cardinalDirection: CardinalDirection;
    id: string;
    joyId: string;
    time: Date;
  };
  sendDirection: {
    movementSettings: TMovementSettings;
    direction: "up" | "right" | "down" | "left";
    id: string;
    joyId: string;
    time: Date;
  };
};
