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 = {
  ClusterMultiviewerHeadReference: (
    _raw: VScript.DataViews.Subtree<VScript.VSocket>,
  ) => new ClusterMultiviewerHeadReference(_raw),
  ClusterMultiviewerLocalConfiguration: (
    _raw: VScript.DataViews.Subtree<VScript.VSocket>,
  ) => new ClusterMultiviewerLocalConfiguration(_raw),
  ClusterProcessorMipMapsInputRuntime: (
    _raw: VScript.DataViews.Subtree<VScript.VSocket>,
  ) => new ClusterProcessorMipMapsInputRuntime(_raw),
  ClusterProcessorsLocalConfiguration: (
    _raw: VScript.DataViews.Subtree<VScript.VSocket>,
  ) => new ClusterProcessorsLocalConfiguration(_raw),
  ClusterProcessorsPPMSRuntime: (
    _raw: VScript.DataViews.Subtree<VScript.VSocket>,
  ) => new ClusterProcessorsPPMSRuntime(_raw),
} as const;
export const lower = {
  ClusterMultiviewerHeadReference: (_x: ClusterMultiviewerHeadReference) =>
    _x.raw.kwl,
  ClusterMultiviewerLocalConfiguration: (
    _x: ClusterMultiviewerLocalConfiguration,
  ) => _x.raw.kwl,
  ClusterProcessorMipMapsInputRuntime: (
    _x: ClusterProcessorMipMapsInputRuntime,
  ) => _x.raw.kwl,
  ClusterProcessorsLocalConfiguration: (
    _x: ClusterProcessorsLocalConfiguration,
  ) => _x.raw.kwl,
  ClusterProcessorsPPMSRuntime: (_x: ClusterProcessorsPPMSRuntime) =>
    _x.raw.kwl,
} as const;
export class ClusterMultiviewerHeadReference
  implements
    VScript.Referenceable<"ClusterProcessors::Data::ClusterMultiviewerHeadReference">
{
  readonly type_identifier =
    "ClusterProcessors::Data::ClusterMultiviewerHeadReference" as const;
  constructor(readonly raw: VScript.DataViews.Subtree<VScript.VSocket>) {}
  get head_id(): VScript.rwKeyword<
    VScript.VSocket,
    number,
    number,
    VAPI.ClusterProcessors.MultiviewerHeadID,
    VAPI.ClusterProcessors.MultiviewerHeadID,
    VAPI.ClusterProcessors.ClusterMultiviewerHeadReference
  > {
    return new VScript.rwKeyword<
      VScript.VSocket,
      number,
      number,
      VAPI.ClusterProcessors.MultiviewerHeadID,
      VAPI.ClusterProcessors.MultiviewerHeadID,
      VAPI.ClusterProcessors.ClusterMultiviewerHeadReference
    >(
      this,
      "head_id" 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 class ClusterMultiviewerHeadReferenceAsNamedTableRow extends ClusterMultiviewerHeadReference {
  readonly index: number;
  constructor(
    readonly raw: VScript.DataViews.SubtreeNamedTableRow<VScript.VSocket>,
  ) {
    super(raw);
    this.index = raw.index;
  }
  async rename(name: string, opts?: VScript.CommonWriteOptions) {
    await this.raw.rename(name, opts);
  }
  async row_name(opts?: VScript.CommonCommandOptions) {
    return await this.raw.row_name(opts);
  }
  async delete(opts?: VScript.CommonWriteOptions) {
    await this.raw.delete(opts);
  }
}
export class ClusterMultiviewerLocalConfiguration
  implements
    VScript.Referenceable<"ClusterProcessors::Data::ClusterMultiviewerLocalConfiguration">
{
  readonly type_identifier =
    "ClusterProcessors::Data::ClusterMultiviewerLocalConfiguration" as const;
  constructor(readonly raw: VScript.DataViews.Subtree<VScript.VSocket>) {}
  get heads() {
    return new VScript.StronglyTypedNamedTable<
      VScript.VSocket,
      "ClusterProcessors::Data::ClusterMultiviewerHeadReference",
      VAPI.ClusterProcessors.ClusterMultiviewerHeadReferenceAsNamedTableRow
    >(
      VScript.VAPIHelpers.subtree_named_table_child_checked(
        this.raw,
        0,
        "heads",
      ),
      (raw: VScript.DataViews.SubtreeNamedTableRow<VScript.VSocket>) =>
        new VAPI.ClusterProcessors.ClusterMultiviewerHeadReferenceAsNamedTableRow(
          raw,
        ),
    );
  }
}
export class ClusterProcessorMipMapsInputRuntime
  implements
    VScript.Referenceable<"ClusterProcessors::Data::ClusterProcessorMipMapsInputRuntime">
{
  readonly type_identifier =
    "ClusterProcessors::Data::ClusterProcessorMipMapsInputRuntime" as const;
  constructor(readonly raw: VScript.DataViews.Subtree<VScript.VSocket>) {}

  /**
    Source IP address of the mipmap RTP stream
  */
  get src_ip_address(): VScript.rKeyword<
    VScript.VSocket,
    null | string,
    null | string,
    VAPI.ClusterProcessors.ClusterProcessorMipMapsInputRuntime
  > {
    return new VScript.rKeyword<
      VScript.VSocket,
      null | string,
      null | string,
      VAPI.ClusterProcessors.ClusterProcessorMipMapsInputRuntime
    >(this, "src_ip_address" as VScript.SysName, {
      lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
      lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
    });
  }

  /**
    Destination IP address of the mipmap RTP stream
  */
  get dest_ip_address(): VScript.rKeyword<
    VScript.VSocket,
    null | string,
    null | string,
    VAPI.ClusterProcessors.ClusterProcessorMipMapsInputRuntime
  > {
    return new VScript.rKeyword<
      VScript.VSocket,
      null | string,
      null | string,
      VAPI.ClusterProcessors.ClusterProcessorMipMapsInputRuntime
    >(this, "dest_ip_address" as VScript.SysName, {
      lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
      lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
    });
  }
  get interface(): VScript.rKeyword<
    VScript.VSocket,
    null | string,
    null | VAPI.NetworkInterfaces.VirtualInterface,
    VAPI.ClusterProcessors.ClusterProcessorMipMapsInputRuntime
  > {
    return new VScript.rKeyword<
      VScript.VSocket,
      null | string,
      null | VAPI.NetworkInterfaces.VirtualInterface,
      VAPI.ClusterProcessors.ClusterProcessorMipMapsInputRuntime
    >(this, "interface" as VScript.SysName, {
      lift: VScript.VAPIHelpers.liftOrLowerNullable(
        (raw_kwl: string, _socket: VScript.VSocket) =>
          new VAPI.NetworkInterfaces.VirtualInterface(
            VScript.VAPIHelpers.get_subtree(
              _socket,
              raw_kwl as VScript.KWLName<"full">,
            ),
          ),
      ),
      lower: VScript.VAPIHelpers.liftOrLowerNullable(
        (
          x: VScript.Referenceable<"NetworkInterfaces::Data::VirtualInterface"> &
            VScript.StronglyTypedSubtree<VScript.VSocket>,
          _: VScript.VSocket,
        ) => x.raw.kwl,
      ),
    });
  }
  get metadata(): VScript.rKeyword<
    VScript.VSocket,
    number,
    number,
    VAPI.ClusterProcessors.ClusterProcessorMipMapsInputRuntime
  > {
    return new VScript.rKeyword<
      VScript.VSocket,
      number,
      number,
      VAPI.ClusterProcessors.ClusterProcessorMipMapsInputRuntime
    >(this, "metadata" as VScript.SysName, {
      lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
      lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
    });
  }
}
export class ClusterProcessorsLocalConfiguration
  implements
    VScript.Referenceable<"ClusterProcessors::Data::ClusterProcessorsLocalConfiguration">
{
  readonly type_identifier =
    "ClusterProcessors::Data::ClusterProcessorsLocalConfiguration" as const;
  constructor(readonly raw: VScript.DataViews.Subtree<VScript.VSocket>) {}
  get multiviewer() {
    return VAPI.ClusterProcessors.lift.ClusterMultiviewerLocalConfiguration(
      VScript.VAPIHelpers.subtree_child_checked(this.raw, 0, "multiviewer"),
    );
  }
}
export class ClusterProcessorsPPMSRuntime
  implements
    VScript.Referenceable<"ClusterProcessors::Data::ClusterProcessorsPPMSRuntime">
{
  readonly type_identifier =
    "ClusterProcessors::Data::ClusterProcessorsPPMSRuntime" as const;
  constructor(readonly raw: VScript.DataViews.Subtree<VScript.VSocket>) {}
  get source_sdp(): VScript.rKeyword<
    VScript.VSocket,
    string,
    string,
    VAPI.ClusterProcessors.ClusterProcessorsPPMSRuntime
  > {
    return new VScript.rKeyword<
      VScript.VSocket,
      string,
      string,
      VAPI.ClusterProcessors.ClusterProcessorsPPMSRuntime
    >(this, "source_sdp" as VScript.SysName, {
      lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
      lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
    });
  }
  get source_channels_num(): VScript.rKeyword<
    VScript.VSocket,
    number,
    number,
    VAPI.ClusterProcessors.ClusterProcessorsPPMSRuntime
  > {
    return new VScript.rKeyword<
      VScript.VSocket,
      number,
      number,
      VAPI.ClusterProcessors.ClusterProcessorsPPMSRuntime
    >(this, "source_channels_num" as VScript.SysName, {
      lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
      lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
    });
  }
}
export type MultiviewerHeadID = number;
export type VideoStandard =
  | "HD1080p50"
  | "HD1080p59_94"
  | "HD1080p60"
  | "HD2160p50"
  | "HD2160p59_94"
  | "HD2160p60";
export const Enums = {
  VideoStandard: [
    "HD1080p50",
    "HD1080p59_94",
    "HD1080p60",
    "HD2160p50",
    "HD2160p59_94",
    "HD2160p60",
  ] as VideoStandard[],
} as const;
