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 = {
  ClusterIPOutputConfiguration: (
    _raw: VScript.DataViews.Subtree<VScript.VSocket>,
  ) => new ClusterIPOutputConfiguration(_raw),
  ClusterOutputsGlobalConfiguration: (
    _raw: VScript.DataViews.Subtree<VScript.VSocket>,
  ) => new ClusterOutputsGlobalConfiguration(_raw),
  ClusterOutputsGlobalRuntime: (
    _raw: VScript.DataViews.Subtree<VScript.VSocket>,
  ) => new ClusterOutputsGlobalRuntime(_raw),
  ClusterSDIOutputCrossbar: (
    _raw: VScript.DataViews.Subtree<VScript.VSocket>,
  ) => new ClusterSDIOutputCrossbar(_raw),
} as const;
export const lower = {
  ClusterIPOutputConfiguration: (_x: ClusterIPOutputConfiguration) =>
    _x.raw.kwl,
  ClusterOutputsGlobalConfiguration: (_x: ClusterOutputsGlobalConfiguration) =>
    _x.raw.kwl,
  ClusterOutputsGlobalRuntime: (_x: ClusterOutputsGlobalRuntime) => _x.raw.kwl,
  ClusterSDIOutputCrossbar: (_x: ClusterSDIOutputCrossbar) => _x.raw.kwl,
} as const;
export class ClusterIPOutputConfiguration
  implements
    VScript.Referenceable<"ClusterOutputs::Data::ClusterIPOutputConfiguration">
{
  readonly type_identifier =
    "ClusterOutputs::Data::ClusterIPOutputConfiguration" as const;
  constructor(readonly raw: VScript.DataViews.Subtree<VScript.VSocket>) {}
  get sdp(): VScript.rKeyword<
    VScript.VSocket,
    string,
    string,
    VAPI.ClusterOutputs.ClusterIPOutputConfiguration
  > {
    return new VScript.rKeyword<
      VScript.VSocket,
      string,
      string,
      VAPI.ClusterOutputs.ClusterIPOutputConfiguration
    >(this, "sdp" as VScript.SysName, {
      lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
      lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
    });
  }
}
export class ClusterOutputsGlobalConfiguration
  implements
    VScript.Referenceable<"ClusterOutputs::Data::ClusterOutputsGlobalConfiguration">
{
  readonly type_identifier =
    "ClusterOutputs::Data::ClusterOutputsGlobalConfiguration" as const;
  constructor(readonly raw: VScript.DataViews.Subtree<VScript.VSocket>) {}
  get sdi() {
    return VAPI.ClusterOutputs.lift.ClusterSDIOutputCrossbar(
      VScript.VAPIHelpers.subtree_child_checked(this.raw, 0, "sdi"),
    );
  }
}
export class ClusterOutputsGlobalRuntime
  implements
    VScript.Referenceable<"ClusterOutputs::Data::ClusterOutputsGlobalRuntime">
{
  readonly type_identifier =
    "ClusterOutputs::Data::ClusterOutputsGlobalRuntime" as const;
  constructor(readonly raw: VScript.DataViews.Subtree<VScript.VSocket>) {}
  get ip() {
    return new VScript.StronglyTypedTable<
      VScript.VSocket,
      "ClusterOutputs::Data::ClusterIPOutputConfiguration",
      VAPI.ClusterOutputs.ClusterIPOutputConfiguration
    >(
      VScript.VAPIHelpers.subtree_table_child_checked(this.raw, 0, "ip"),
      (raw: VScript.DataViews.Subtree<VScript.VSocket>, _: VScript.VSocket) =>
        VAPI.ClusterOutputs.lift.ClusterIPOutputConfiguration(raw),
    );
  }
}
export class ClusterSDIOutputCrossbar
  implements
    VScript.Referenceable<"ClusterOutputs::Data::ClusterSDIOutputCrossbar">
{
  readonly type_identifier =
    "ClusterOutputs::Data::ClusterSDIOutputCrossbar" as const;
  constructor(readonly raw: VScript.DataViews.Subtree<VScript.VSocket>) {}
  get crossbar(): VScript.rwKeyword<
    VScript.VSocket,
    Array<number>,
    VScript.MaybeSparseArray<number>,
    Array<VAPI.ClusterSources.VideoSourceID>,
    VScript.MaybeSparseArray<VAPI.ClusterSources.VideoSourceID>,
    VAPI.ClusterOutputs.ClusterSDIOutputCrossbar
  > {
    return new VScript.rwKeyword<
      VScript.VSocket,
      Array<number>,
      VScript.MaybeSparseArray<number>,
      Array<VAPI.ClusterSources.VideoSourceID>,
      VScript.MaybeSparseArray<VAPI.ClusterSources.VideoSourceID>,
      VAPI.ClusterOutputs.ClusterSDIOutputCrossbar
    >(
      this,
      "crossbar" as VScript.SysName,
      {
        lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
        lower: (elems, socket) =>
          VScript.VAPIHelpers.mapMaybeSparseArray(elems, (el) =>
            ((x: any /* FIXME */, _: VScript.VSocket) => x)(el, socket),
          ) as any /* FIXME: we're currently casting to any because we don't distinguish between read payloads, as sent by the backend, and lowered write payloads */,
      },
      {
        lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
        lower: (elems, socket) =>
          VScript.VAPIHelpers.mapMaybeSparseArray(elems, (el) =>
            ((x: any /* FIXME */, _: VScript.VSocket) => x)(el, socket),
          ) as any /* FIXME: we're currently casting to any because we don't distinguish between read payloads, as sent by the backend, and lowered write payloads */,
      },
      null,
    );
  }
}
