# AB CIP integration-test fixture — ab_server (libplctag).
#
# One service per family. All bind :44818 on the host; only one runs at a
# time. Commands mirror the CLI args AbServerProfile.cs constructs for the
# native-binary path.
#
# Usage:
#   docker compose --profile controllogix up
#   docker compose --profile compactlogix up
#   docker compose --profile micro800 up
#   docker compose --profile guardlogix up
services:
  controllogix:
    profiles: ["controllogix"]
    build:
      context: .
      dockerfile: Dockerfile
    image: otopcua-ab-server:libplctag-release
    container_name: otopcua-ab-server-controllogix
    restart: "no"
    ports:
      - "44818:44818"
    command: [
      "ab_server",
      "--plc=ControlLogix",
      "--path=1,0",
      "--port=44818",
      "--tag=TestDINT:DINT[1]",
      "--tag=TestREAL:REAL[1]",
      "--tag=TestBOOL:BOOL[1]",
      "--tag=TestSINT:SINT[1]",
      "--tag=TestString:STRING[1]",
      "--tag=TestArray:DINT[16]"
    ]

  compactlogix:
    profiles: ["compactlogix"]
    image: otopcua-ab-server:libplctag-release
    build:
      context: .
      dockerfile: Dockerfile
    container_name: otopcua-ab-server-compactlogix
    restart: "no"
    ports:
      - "44818:44818"
    # ab_server doesn't distinguish CompactLogix from ControlLogix — no
    # dedicated --plc mode. Driver-side ConnectionSize cap is enforced
    # separately (see AbServerProfile.CompactLogix Notes).
    command: [
      "ab_server",
      "--plc=ControlLogix",
      "--path=1,0",
      "--port=44818",
      "--tag=TestDINT:DINT[1]",
      "--tag=TestREAL:REAL[1]",
      "--tag=TestBOOL:BOOL[1]"
    ]

  micro800:
    profiles: ["micro800"]
    image: otopcua-ab-server:libplctag-release
    build:
      context: .
      dockerfile: Dockerfile
    container_name: otopcua-ab-server-micro800
    restart: "no"
    ports:
      - "44818:44818"
    # ab_server does have a Micro800 plc mode (unconnected-only, empty path).
    command: [
      "ab_server",
      "--plc=Micro800",
      "--port=44818",
      "--tag=TestDINT:DINT[1]",
      "--tag=TestREAL:REAL[1]"
    ]

  guardlogix:
    profiles: ["guardlogix"]
    image: otopcua-ab-server:libplctag-release
    build:
      context: .
      dockerfile: Dockerfile
    container_name: otopcua-ab-server-guardlogix
    restart: "no"
    ports:
      - "44818:44818"
    # ab_server has no safety subsystem — _S suffix triggers driver-side
    # classification only.
    command: [
      "ab_server",
      "--plc=ControlLogix",
      "--path=1,0",
      "--port=44818",
      "--tag=TestDINT:DINT[1]",
      "--tag=SafetyDINT_S:DINT[1]"
    ]
