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 = {
  BncMode: (_raw: VScript.DataViews.Subtree<VScript.VSocket>) =>
    new BncMode(_raw),
  Constraints: (_raw: VScript.DataViews.Subtree<VScript.VSocket>) =>
    new Constraints(_raw),
  EyeShape: (
    _raw: [null | number, null | number],
    _socket: VScript.VSocket,
  ): EyeShape => {
    return {
      width: _raw[0],
      height: _raw[1],
    };
  },
  MADIOutput: (_raw: VScript.DataViews.Subtree<VScript.VSocket>) =>
    new MADIOutput(_raw),
  BncModeBnc: (_raw: VScript.DataViews.Subtree<VScript.VSocket>) =>
    new BncModeBnc(_raw),
  Configuration: (_raw: VScript.DataViews.Subtree<VScript.VSocket>) =>
    new Configuration(_raw),
  MergerConnectedTo: (_raw: VScript.DataViews.Subtree<VScript.VSocket>) =>
    new MergerConnectedTo(_raw),
} as const;
export const lower = {
  BncMode: (_x: BncMode) => _x.raw.kwl,
  Constraints: (_x: Constraints) => _x.raw.kwl,
  EyeShape: (
    _x: { width: null | number; height: null | number },
    _socket: VScript.VSocket,
  ): [null | number, null | number] => [_x.width, _x.height],
  MADIOutput: (_x: MADIOutput) => _x.raw.kwl,
  BncModeBnc: (_x: BncModeBnc) => _x.raw.kwl,
  Configuration: (_x: Configuration) => _x.raw.kwl,
  MergerConnectedTo: (_x: MergerConnectedTo) => _x.raw.kwl,
} as const;
export type Audio12GMode = "st299_2_stream_0" | "st299_1_stream_0_1";
export type BNCDirection = "ceDisable" | "ceIn" | "ceOut" | "ceInOut";
export class BncMode
  implements VScript.Referenceable<"IOModule::Data::BncMode">
{
  readonly type_identifier = "IOModule::Data::BncMode" as const;
  constructor(readonly raw: VScript.DataViews.Subtree<VScript.VSocket>) {}
  get version(): VScript.rKeyword<
    VScript.VSocket,
    string,
    string,
    VAPI.IOModule.BncMode
  > {
    return new VScript.rKeyword<
      VScript.VSocket,
      string,
      string,
      VAPI.IOModule.BncMode
    >(this, "version" as VScript.SysName, {
      lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
      lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
    });
  }
  get bnc() {
    return new VScript.StronglyTypedArray<
      VScript.VSocket,
      "IOModule::Data::BncMode::Bnc",
      VAPI.IOModule.BncModeBnc
    >(
      VScript.VAPIHelpers.subtree_array_child_checked(this.raw, 1, "bnc"),
      (st: VScript.DataViews.Subtree<VScript.VSocket>, _: VScript.VSocket) =>
        VAPI.IOModule.lift.BncModeBnc(st),
    );
  }
  get install_version(): VScript.rKeyword<
    VScript.VSocket,
    string,
    string,
    VAPI.IOModule.BncMode
  > {
    return new VScript.rKeyword<
      VScript.VSocket,
      string,
      string,
      VAPI.IOModule.BncMode
    >(this, "install_version" as VScript.SysName, {
      lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
      lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
    });
  }
}
export type ClosedCaptionDeembedMode = "CEA708" | "OP47";
export type ConfigDirection = "Input" | "Output";
export class Constraints
  implements VScript.Referenceable<"IOModule::Data::Constraints">
{
  readonly type_identifier = "IOModule::Data::Constraints" as const;
  constructor(readonly raw: VScript.DataViews.Subtree<VScript.VSocket>) {}
  get standard(): VScript.dKeyword<
    VScript.VSocket,
    null | VAPI.Video.Standard,
    null | VAPI.Video.Standard,
    null | VAPI.Video.Standard,
    null | VAPI.Video.Standard,
    VAPI.IOModule.Constraints
  > {
    return new VScript.dKeyword<
      VScript.VSocket,
      null | VAPI.Video.Standard,
      null | VAPI.Video.Standard,
      null | VAPI.Video.Standard,
      null | VAPI.Video.Standard,
      VAPI.IOModule.Constraints
    >(
      this,
      "standard" 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 DecoderGroupPhyRxCalibrateBusy =
  | "cePhyRxNormal"
  | "cePhyRxCalibrate";
export type DecoderGroupPhyRxLockedStatus =
  | "Unlocked"
  | "LockedToRef"
  | "LockedToData";
export type DecoderGroupPhyRxReady = "ceNotReady" | "ceReady";
export interface EyeShape {
  width: null | number;
  height: null | number;
}
export type MADIChannels = "CH28" | "CH32" | "CH56" | "CH64";
export class MADIOutput
  implements VScript.Referenceable<"IOModule::Data::MADIOutput">
{
  readonly type_identifier = "IOModule::Data::MADIOutput" as const;
  constructor(readonly raw: VScript.DataViews.Subtree<VScript.VSocket>) {}
  get channels(): VScript.dKeyword<
    VScript.VSocket,
    VAPI.IOModule.MADIChannels,
    VAPI.IOModule.MADIChannels,
    VAPI.IOModule.MADIChannels,
    VAPI.IOModule.MADIChannels,
    VAPI.IOModule.MADIOutput
  > {
    return new VScript.dKeyword<
      VScript.VSocket,
      VAPI.IOModule.MADIChannels,
      VAPI.IOModule.MADIChannels,
      VAPI.IOModule.MADIChannels,
      VAPI.IOModule.MADIChannels,
      VAPI.IOModule.MADIOutput
    >(
      this,
      "channels" 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 SDIMADIMode = "SDI" | "MADI";
export type SyncOutputStandard =
  | "PAL"
  | "NTSC"
  | "HD720p50"
  | "HD720p59_94"
  | "HD720p60"
  | "HD1080p23_98"
  | "HD1080p24"
  | "HD1080p25"
  | "HD1080p29_97"
  | "HD1080p30"
  | "HD1080i50"
  | "HD1080i59_94"
  | "HD1080i60";
export class BncModeBnc
  implements VScript.Referenceable<"IOModule::Data::BncMode::Bnc">
{
  readonly type_identifier = "IOModule::Data::BncMode::Bnc" as const;
  constructor(readonly raw: VScript.DataViews.Subtree<VScript.VSocket>) {}
  get board(): VScript.rKeyword<
    VScript.VSocket,
    number,
    number,
    VAPI.IOModule.BncModeBnc
  > {
    return new VScript.rKeyword<
      VScript.VSocket,
      number,
      number,
      VAPI.IOModule.BncModeBnc
    >(this, "board" as VScript.SysName, {
      lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
      lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
    });
  }
  get chip_type(): VScript.rKeyword<
    VScript.VSocket,
    string,
    string,
    VAPI.IOModule.BncModeBnc
  > {
    return new VScript.rKeyword<
      VScript.VSocket,
      string,
      string,
      VAPI.IOModule.BncModeBnc
    >(this, "chip_type" as VScript.SysName, {
      lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
      lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
    });
  }
  get direction(): VScript.rKeyword<
    VScript.VSocket,
    VAPI.IOModule.BNCDirection,
    VAPI.IOModule.BNCDirection,
    VAPI.IOModule.BncModeBnc
  > {
    return new VScript.rKeyword<
      VScript.VSocket,
      VAPI.IOModule.BNCDirection,
      VAPI.IOModule.BNCDirection,
      VAPI.IOModule.BncModeBnc
    >(this, "direction" as VScript.SysName, {
      lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
      lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
    });
  }
  get frequency(): VScript.rKeyword<
    VScript.VSocket,
    VAPI.Video.BNCInputFreq,
    VAPI.Video.BNCInputFreq,
    VAPI.IOModule.BncModeBnc
  > {
    return new VScript.rKeyword<
      VScript.VSocket,
      VAPI.Video.BNCInputFreq,
      VAPI.Video.BNCInputFreq,
      VAPI.IOModule.BncModeBnc
    >(this, "frequency" as VScript.SysName, {
      lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
      lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
    });
  }
}
export class Configuration
  implements VScript.Referenceable<"IOModule::Data::Configuration">
{
  readonly type_identifier = "IOModule::Data::Configuration" as const;
  constructor(readonly raw: VScript.DataViews.Subtree<VScript.VSocket>) {}
  get direction(): VScript.rwKeyword<
    VScript.VSocket,
    VAPI.IOModule.ConfigDirection,
    VAPI.IOModule.ConfigDirection,
    VAPI.IOModule.ConfigDirection,
    VAPI.IOModule.ConfigDirection,
    VAPI.IOModule.Configuration
  > {
    return new VScript.rwKeyword<
      VScript.VSocket,
      VAPI.IOModule.ConfigDirection,
      VAPI.IOModule.ConfigDirection,
      VAPI.IOModule.ConfigDirection,
      VAPI.IOModule.ConfigDirection,
      VAPI.IOModule.Configuration
    >(
      this,
      "direction" 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 MergerConnectedTo
  implements VScript.Referenceable<"IOModule::Data::Merger::ConnectedTo">
{
  readonly type_identifier = "IOModule::Data::Merger::ConnectedTo" as const;
  constructor(readonly raw: VScript.DataViews.Subtree<VScript.VSocket>) {}
  get inputs(): VScript.rKeyword<
    VScript.VSocket,
    string,
    string,
    VAPI.IOModule.MergerConnectedTo
  > {
    return new VScript.rKeyword<
      VScript.VSocket,
      string,
      string,
      VAPI.IOModule.MergerConnectedTo
    >(this, "inputs" as VScript.SysName, {
      lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
      lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
    });
  }
  get input_identifier(): VScript.rKeyword<
    VScript.VSocket,
    Array<number>,
    Array<VAPI.Primitives.Signed32>,
    VAPI.IOModule.MergerConnectedTo
  > {
    return new VScript.rKeyword<
      VScript.VSocket,
      Array<number>,
      Array<VAPI.Primitives.Signed32>,
      VAPI.IOModule.MergerConnectedTo
    >(this, "input_identifier" as VScript.SysName, {
      lift: (x: any /* FIXME */, _: VScript.VSocket) => x,
      lower: (x: any /* FIXME */, _: VScript.VSocket) => x,
    });
  }
}
export const Enums = {
  SyncOutputStandard: [
    "PAL",
    "NTSC",
    "HD720p50",
    "HD720p59_94",
    "HD720p60",
    "HD1080p23_98",
    "HD1080p24",
    "HD1080p25",
    "HD1080p29_97",
    "HD1080p30",
    "HD1080i50",
    "HD1080i59_94",
    "HD1080i60",
  ] as SyncOutputStandard[],
  SDIMADIMode: ["SDI", "MADI"] as SDIMADIMode[],
  MADIChannels: ["CH28", "CH32", "CH56", "CH64"] as MADIChannels[],
  DecoderGroupPhyRxReady: ["ceNotReady", "ceReady"] as DecoderGroupPhyRxReady[],
  DecoderGroupPhyRxLockedStatus: [
    "Unlocked",
    "LockedToRef",
    "LockedToData",
  ] as DecoderGroupPhyRxLockedStatus[],
  DecoderGroupPhyRxCalibrateBusy: [
    "cePhyRxNormal",
    "cePhyRxCalibrate",
  ] as DecoderGroupPhyRxCalibrateBusy[],
  ConfigDirection: ["Input", "Output"] as ConfigDirection[],
  ClosedCaptionDeembedMode: ["CEA708", "OP47"] as ClosedCaptionDeembedMode[],
  BNCDirection: ["ceDisable", "ceIn", "ceOut", "ceInOut"] as BNCDirection[],
  Audio12GMode: ["st299_2_stream_0", "st299_1_stream_0_1"] as Audio12GMode[],
} as const;
