# Suite-level e2e harness for Azaion UI (AZ-456 / _docs/02_document/tests/environment.md).
#
# The parent suite repo publishes the four required service images under the
# `:test` tag (admin, flights, annotations, detect). The auxiliary services
# (loader, resource, gps-denied-*, autopilot) are wired here as best-effort
# soft dependencies — Playwright tests that exercise them will be skipped if
# the registry hasn't published a `:test` tag yet (Risk 4 in AZ-456).
#
# Network: `azaion-test-net` is isolated; the only outbound endpoints are the
# two stubs (`owm-stub`, `tile-stub`). External hosts are blocked at the
# Playwright route layer (AC-08).

services:
  test-db:
    image: postgres:16-alpine
    environment:
      POSTGRES_USER: azaion
      POSTGRES_PASSWORD: azaion
      POSTGRES_DB: azaion
    volumes:
      - test-db-data:/var/lib/postgresql/data
      - ./fixtures/seeds.sql:/docker-entrypoint-initdb.d/seeds.sql:ro
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U azaion -d azaion"]
      interval: 5s
      timeout: 3s
      retries: 10
    networks: [azaion-test-net]

  admin:
    image: azaion/admin:test
    environment:
      DB_CONNECTION: "Host=test-db;Database=azaion;Username=azaion;Password=azaion"
      ENABLE_TEST_ONLY_ENDPOINTS: "true"
    depends_on:
      test-db:
        condition: service_healthy
    networks: [azaion-test-net]

  flights:
    image: azaion/flights:test
    environment:
      DB_CONNECTION: "Host=test-db;Database=azaion;Username=azaion;Password=azaion"
      ENABLE_LIVE_GPS_SIMULATOR: "true"
    depends_on:
      test-db:
        condition: service_healthy
    networks: [azaion-test-net]

  annotations:
    image: azaion/annotations:test
    environment:
      DB_CONNECTION: "Host=test-db;Database=azaion;Username=azaion;Password=azaion"
      ENABLE_STATUS_EVENT_GENERATOR: "true"
    depends_on:
      test-db:
        condition: service_healthy
    networks: [azaion-test-net]

  detect:
    image: azaion/detect:test
    networks: [azaion-test-net]

  loader:
    image: azaion/loader:test
    networks: [azaion-test-net]

  resource:
    image: azaion/resource:test
    networks: [azaion-test-net]

  owm-stub:
    build: ./stubs/owm
    ports:
      - "8081"
    healthcheck:
      test: ["CMD", "wget", "-qO-", "http://localhost:8081/health"]
      interval: 5s
      timeout: 3s
      retries: 5
    networks: [azaion-test-net]

  tile-stub:
    build: ./stubs/tile
    ports:
      - "8082"
    healthcheck:
      test: ["CMD", "wget", "-qO-", "http://localhost:8082/health"]
      interval: 5s
      timeout: 3s
      retries: 5
    networks: [azaion-test-net]

  azaion-ui:
    build:
      context: ..
      dockerfile: Dockerfile
    environment:
      VITE_API_BASE_URL: "/api"
      VITE_OWM_BASE_URL: "http://owm-stub:8081"
      VITE_TILE_BASE_URL: "http://tile-stub:8082"
    depends_on:
      admin: { condition: service_started }
      flights: { condition: service_started }
      annotations: { condition: service_started }
      detect: { condition: service_started }
      owm-stub: { condition: service_healthy }
      tile-stub: { condition: service_healthy }
    healthcheck:
      test: ["CMD", "wget", "-qO-", "http://localhost:80/"]
      interval: 5s
      timeout: 3s
      retries: 10
    networks: [azaion-test-net]

  playwright-runner:
    build: ./runner
    depends_on:
      azaion-ui:
        condition: service_healthy
      owm-stub:
        condition: service_healthy
      tile-stub:
        condition: service_healthy
    environment:
      PLAYWRIGHT_BASE_URL: "http://azaion-ui:80"
      PLAYWRIGHT_OUTPUT_DIR: "/output/e2e"
    volumes:
      - ../test-output:/output
      - ..:/workspace:ro
    working_dir: /workspace
    networks: [azaion-test-net]

networks:
  azaion-test-net:
    driver: bridge

volumes:
  test-db-data: {}
