import * as VScript from "http://172.16.0.12/bladerunner_sdk/vscript@2.5.2/deno/release/mod.ts";
import * as VAPI from "./mod.ts";
export const lift = {
  Audio: (_raw: VScript.DataViews.Subtree<VScript.VSocket>) => new Audio(_raw),
  Video: (_raw: VScript.DataViews.Subtree<VScript.VSocket>) => new Video(_raw),
  VideoBlackDetect: (_raw: VScript.DataViews.Subtree<VScript.VSocket>) =>
    new VideoBlackDetect(_raw),
  AudioLoudnessChannels: (_raw: VScript.DataViews.Subtree<VScript.VSocket>) =>
    new AudioLoudnessChannels(_raw),
} as const;
export const lower = {
  Audio: (_x: Audio) => _x.raw.kwl,
  Video: (_x: Video) => _x.raw.kwl,
  VideoBlackDetect: (_x: VideoBlackDetect) => _x.raw.kwl,
  AudioLoudnessChannels: (_x: AudioLoudnessChannels) => _x.raw.kwl,
} as const;
export class Audio implements VScript.Referenceable<"Monitoring::Data::Audio"> {
  readonly type_identifier = "Monitoring::Data::Audio" as const;
  constructor(readonly raw: VScript.DataViews.Subtree<VScript.VSocket>) {}
  get active(): VScript.dKeyword<
    VScript.VSocket,
    boolean,
    boolean,
    boolean,
    boolean,
    VAPI.Monitoring.Audio
  > {
    return new VScript.dKeyword<
      VScript.VSocket,
      boolean,
      boolean,
      boolean,
      boolean,
      VAPI.Monitoring.Audio
    >(
      this,
      "active" as VScript.SysName,
      {
        lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
        lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
      },
      {
        lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
        lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
      },
      null,
    );
  }
  get silence_detect_duration(): VScript.dKeyword<
    VScript.VSocket,
    number,
    number,
    VScript.Duration,
    VScript.Duration,
    VAPI.Monitoring.Audio
  > {
    return new VScript.dKeyword<
      VScript.VSocket,
      number,
      number,
      VScript.Duration,
      VScript.Duration,
      VAPI.Monitoring.Audio
    >(
      this,
      "silence_detect_duration" as VScript.SysName,
      {
        lift: VScript.VAPIHelpers.liftNanoseconds,
        lower: VScript.VAPIHelpers.lowerNanoseconds,
      },
      {
        lift: VScript.VAPIHelpers.liftNanoseconds,
        lower: VScript.VAPIHelpers.lowerNanoseconds,
      },
      null,
    );
  }
  get non_silence_detect_duration(): VScript.dKeyword<
    VScript.VSocket,
    number,
    number,
    VScript.Duration,
    VScript.Duration,
    VAPI.Monitoring.Audio
  > {
    return new VScript.dKeyword<
      VScript.VSocket,
      number,
      number,
      VScript.Duration,
      VScript.Duration,
      VAPI.Monitoring.Audio
    >(
      this,
      "non_silence_detect_duration" as VScript.SysName,
      {
        lift: VScript.VAPIHelpers.liftNanoseconds,
        lower: VScript.VAPIHelpers.lowerNanoseconds,
      },
      {
        lift: VScript.VAPIHelpers.liftNanoseconds,
        lower: VScript.VAPIHelpers.lowerNanoseconds,
      },
      null,
    );
  }
  get detect_level(): VScript.dKeyword<
    VScript.VSocket,
    number,
    number,
    number,
    number,
    VAPI.Monitoring.Audio
  > {
    return new VScript.dKeyword<
      VScript.VSocket,
      number,
      number,
      number,
      number,
      VAPI.Monitoring.Audio
    >(
      this,
      "detect_level" as VScript.SysName,
      {
        lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
        lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
      },
      {
        lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
        lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
      },
      null,
    );
  }
}
export type LoudnessMode =
  | "DISABLED"
  | "MONO"
  | "STEREO"
  | "SURROUND_5_1"
  | "SURROUND_7_1";
export class Video implements VScript.Referenceable<"Monitoring::Data::Video"> {
  readonly type_identifier = "Monitoring::Data::Video" as const;
  constructor(readonly raw: VScript.DataViews.Subtree<VScript.VSocket>) {}
  get active(): VScript.dKeyword<
    VScript.VSocket,
    boolean,
    boolean,
    boolean,
    boolean,
    VAPI.Monitoring.Video
  > {
    return new VScript.dKeyword<
      VScript.VSocket,
      boolean,
      boolean,
      boolean,
      boolean,
      VAPI.Monitoring.Video
    >(
      this,
      "active" as VScript.SysName,
      {
        lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
        lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
      },
      {
        lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
        lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
      },
      null,
    );
  }
  get freeze_detect_duration(): VScript.dKeyword<
    VScript.VSocket,
    number,
    number,
    VScript.Duration,
    VScript.Duration,
    VAPI.Monitoring.Video
  > {
    return new VScript.dKeyword<
      VScript.VSocket,
      number,
      number,
      VScript.Duration,
      VScript.Duration,
      VAPI.Monitoring.Video
    >(
      this,
      "freeze_detect_duration" as VScript.SysName,
      {
        lift: VScript.VAPIHelpers.liftNanoseconds,
        lower: VScript.VAPIHelpers.lowerNanoseconds,
      },
      {
        lift: VScript.VAPIHelpers.liftNanoseconds,
        lower: VScript.VAPIHelpers.lowerNanoseconds,
      },
      null,
    );
  }
  get black_detect() {
    return VAPI.Monitoring.lift.VideoBlackDetect(
      VScript.VAPIHelpers.subtree_child_checked(this.raw, 2, "black_detect"),
    );
  }
}
export class VideoBlackDetect
  implements VScript.Referenceable<"Monitoring::Data::Video::BlackDetect">
{
  readonly type_identifier = "Monitoring::Data::Video::BlackDetect" as const;
  constructor(readonly raw: VScript.DataViews.Subtree<VScript.VSocket>) {}

  /**
    Luminance threshold for black detect
  */
  get threshold_y(): VScript.dKeyword<
    VScript.VSocket,
    number,
    number,
    number,
    number,
    VAPI.Monitoring.VideoBlackDetect
  > {
    return new VScript.dKeyword<
      VScript.VSocket,
      number,
      number,
      number,
      number,
      VAPI.Monitoring.VideoBlackDetect
    >(
      this,
      "threshold_y" as VScript.SysName,
      {
        lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
        lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
      },
      {
        lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
        lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
      },
      null,
    );
  }

  /**
    Chrominance threshold for black detect
  */
  get threshold_c(): VScript.dKeyword<
    VScript.VSocket,
    number,
    number,
    number,
    number,
    VAPI.Monitoring.VideoBlackDetect
  > {
    return new VScript.dKeyword<
      VScript.VSocket,
      number,
      number,
      number,
      number,
      VAPI.Monitoring.VideoBlackDetect
    >(
      this,
      "threshold_c" as VScript.SysName,
      {
        lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
        lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
      },
      {
        lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
        lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
      },
      null,
    );
  }

  /**
    How many pixels can be above the threshold for black to be detected
  */
  get threshold_pixels(): VScript.dKeyword<
    VScript.VSocket,
    number,
    number,
    number,
    number,
    VAPI.Monitoring.VideoBlackDetect
  > {
    return new VScript.dKeyword<
      VScript.VSocket,
      number,
      number,
      number,
      number,
      VAPI.Monitoring.VideoBlackDetect
    >(
      this,
      "threshold_pixels" as VScript.SysName,
      {
        lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
        lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
      },
      {
        lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
        lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
      },
      null,
    );
  }

  /**
    How long the video must be black before it is signaled as black
  */
  get attack(): VScript.dKeyword<
    VScript.VSocket,
    number,
    number,
    VScript.Duration,
    VScript.Duration,
    VAPI.Monitoring.VideoBlackDetect
  > {
    return new VScript.dKeyword<
      VScript.VSocket,
      number,
      number,
      VScript.Duration,
      VScript.Duration,
      VAPI.Monitoring.VideoBlackDetect
    >(
      this,
      "attack" as VScript.SysName,
      {
        lift: VScript.VAPIHelpers.liftNanoseconds,
        lower: VScript.VAPIHelpers.lowerNanoseconds,
      },
      {
        lift: VScript.VAPIHelpers.liftNanoseconds,
        lower: VScript.VAPIHelpers.lowerNanoseconds,
      },
      null,
    );
  }

  /**
    How long the video must be none black before it is signaled as not black
  */
  get release(): VScript.dKeyword<
    VScript.VSocket,
    number,
    number,
    VScript.Duration,
    VScript.Duration,
    VAPI.Monitoring.VideoBlackDetect
  > {
    return new VScript.dKeyword<
      VScript.VSocket,
      number,
      number,
      VScript.Duration,
      VScript.Duration,
      VAPI.Monitoring.VideoBlackDetect
    >(
      this,
      "release" as VScript.SysName,
      {
        lift: VScript.VAPIHelpers.liftNanoseconds,
        lower: VScript.VAPIHelpers.lowerNanoseconds,
      },
      {
        lift: VScript.VAPIHelpers.liftNanoseconds,
        lower: VScript.VAPIHelpers.lowerNanoseconds,
      },
      null,
    );
  }
}
export class AudioLoudnessChannels
  implements VScript.Referenceable<"Monitoring::Data::AudioLoudness::Channels">
{
  readonly type_identifier =
    "Monitoring::Data::AudioLoudness::Channels" as const;
  constructor(readonly raw: VScript.DataViews.Subtree<VScript.VSocket>) {}
  get left(): VScript.rwKeyword<
    VScript.VSocket,
    null | number,
    null | number,
    null | number,
    null | number,
    VAPI.Monitoring.AudioLoudnessChannels
  > {
    return new VScript.rwKeyword<
      VScript.VSocket,
      null | number,
      null | number,
      null | number,
      null | number,
      VAPI.Monitoring.AudioLoudnessChannels
    >(
      this,
      "left" as VScript.SysName,
      {
        lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
        lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
      },
      {
        lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
        lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
      },
      null,
    );
  }
  get right(): VScript.rwKeyword<
    VScript.VSocket,
    null | number,
    null | number,
    null | number,
    null | number,
    VAPI.Monitoring.AudioLoudnessChannels
  > {
    return new VScript.rwKeyword<
      VScript.VSocket,
      null | number,
      null | number,
      null | number,
      null | number,
      VAPI.Monitoring.AudioLoudnessChannels
    >(
      this,
      "right" as VScript.SysName,
      {
        lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
        lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
      },
      {
        lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
        lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
      },
      null,
    );
  }
  get center(): VScript.rwKeyword<
    VScript.VSocket,
    null | number,
    null | number,
    null | number,
    null | number,
    VAPI.Monitoring.AudioLoudnessChannels
  > {
    return new VScript.rwKeyword<
      VScript.VSocket,
      null | number,
      null | number,
      null | number,
      null | number,
      VAPI.Monitoring.AudioLoudnessChannels
    >(
      this,
      "center" as VScript.SysName,
      {
        lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
        lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
      },
      {
        lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
        lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
      },
      null,
    );
  }
  get surround_left(): VScript.rwKeyword<
    VScript.VSocket,
    null | number,
    null | number,
    null | number,
    null | number,
    VAPI.Monitoring.AudioLoudnessChannels
  > {
    return new VScript.rwKeyword<
      VScript.VSocket,
      null | number,
      null | number,
      null | number,
      null | number,
      VAPI.Monitoring.AudioLoudnessChannels
    >(
      this,
      "surround_left" as VScript.SysName,
      {
        lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
        lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
      },
      {
        lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
        lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
      },
      null,
    );
  }
  get surround_right(): VScript.rwKeyword<
    VScript.VSocket,
    null | number,
    null | number,
    null | number,
    null | number,
    VAPI.Monitoring.AudioLoudnessChannels
  > {
    return new VScript.rwKeyword<
      VScript.VSocket,
      null | number,
      null | number,
      null | number,
      null | number,
      VAPI.Monitoring.AudioLoudnessChannels
    >(
      this,
      "surround_right" as VScript.SysName,
      {
        lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
        lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
      },
      {
        lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
        lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
      },
      null,
    );
  }
  get rear_surround_left(): VScript.rwKeyword<
    VScript.VSocket,
    null | number,
    null | number,
    null | number,
    null | number,
    VAPI.Monitoring.AudioLoudnessChannels
  > {
    return new VScript.rwKeyword<
      VScript.VSocket,
      null | number,
      null | number,
      null | number,
      null | number,
      VAPI.Monitoring.AudioLoudnessChannels
    >(
      this,
      "rear_surround_left" as VScript.SysName,
      {
        lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
        lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
      },
      {
        lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
        lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
      },
      null,
    );
  }
  get rear_surround_right(): VScript.rwKeyword<
    VScript.VSocket,
    null | number,
    null | number,
    null | number,
    null | number,
    VAPI.Monitoring.AudioLoudnessChannels
  > {
    return new VScript.rwKeyword<
      VScript.VSocket,
      null | number,
      null | number,
      null | number,
      null | number,
      VAPI.Monitoring.AudioLoudnessChannels
    >(
      this,
      "rear_surround_right" as VScript.SysName,
      {
        lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
        lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
      },
      {
        lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
        lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
      },
      null,
    );
  }
}
export const Enums = {
  LoudnessMode: [
    "DISABLED",
    "MONO",
    "STEREO",
    "SURROUND_5_1",
    "SURROUND_7_1",
  ] as LoudnessMode[],
} as const;
