# Docker Compose for SeaweedFS S3 IAM Integration Tests
services:
  # SeaweedFS Master
  seaweedfs-master:
    image: chrislusf/seaweedfs:latest
    container_name: seaweedfs-master-test
    command: master -mdir=/data -defaultReplication=000 -port=9333
    ports:
      - "9333:9333"
    volumes:
      - master-data:/data
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9333/cluster/status"]
      interval: 10s
      timeout: 5s
      retries: 5
    networks:
      - seaweedfs-test

  # SeaweedFS Volume  
  seaweedfs-volume:
    image: chrislusf/seaweedfs:latest
    container_name: seaweedfs-volume-test
    command: volume -dir=/data -port=8083 -master=seaweedfs-master:9333
    ports:
      - "8083:8083"
    volumes:
      - volume-data:/data
    depends_on:
      seaweedfs-master:
        condition: service_healthy
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8083/status"]
      interval: 10s
      timeout: 5s
      retries: 5
    networks:
      - seaweedfs-test

  # SeaweedFS Filer
  seaweedfs-filer:
    image: chrislusf/seaweedfs:latest
    container_name: seaweedfs-filer-test
    command: filer -port=8888 -master=seaweedfs-master:9333 -defaultStoreDir=/data
    ports:
      - "8888:8888"
    volumes:
      - filer-data:/data
    depends_on:
      seaweedfs-master:
        condition: service_healthy
      seaweedfs-volume:
        condition: service_healthy
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8888/status"]
      interval: 10s
      timeout: 5s
      retries: 5
    networks:
      - seaweedfs-test

  # SeaweedFS S3 API
  seaweedfs-s3:
    image: chrislusf/seaweedfs:latest
    container_name: seaweedfs-s3-test
    command: s3 -port=8333 -filer=seaweedfs-filer:8888 -config=/config/test_config.json
    ports:
      - "8333:8333"
    volumes:
      - ./test_config.json:/config/test_config.json:ro
    depends_on:
      seaweedfs-filer:
        condition: service_healthy
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8333/"]
      interval: 10s
      timeout: 5s
      retries: 5
    networks:
      - seaweedfs-test

  # Test Runner
  integration-tests:
    build:
      context: ../../../
      dockerfile: test/s3/iam/Dockerfile.s3
    container_name: seaweedfs-s3-iam-tests
    environment:
      - WEED_BINARY=weed
      - S3_PORT=8333
      - FILER_PORT=8888
      - MASTER_PORT=9333
      - VOLUME_PORT=8083
      - TEST_TIMEOUT=30m
      - LOG_LEVEL=2
    depends_on:
      seaweedfs-s3:
        condition: service_healthy
    volumes:
      - .:/app/test/s3/iam
      - test-results:/app/test-results
    networks:
      - seaweedfs-test
    command: ["make", "test"]

  # Optional: Mock LDAP Server for LDAP testing
  ldap-server:
    image: osixia/openldap:1.5.0
    container_name: ldap-server-test
    environment:
      LDAP_ORGANISATION: "Example Corp"
      LDAP_DOMAIN: "example.com"
      LDAP_ADMIN_PASSWORD: "admin-password"
      LDAP_CONFIG_PASSWORD: "config-password"
      LDAP_READONLY_USER: "true"
      LDAP_READONLY_USER_USERNAME: "readonly"
      LDAP_READONLY_USER_PASSWORD: "readonly-password"
    ports:
      - "389:389"
      - "636:636"
    volumes:
      - ldap-data:/var/lib/ldap
      - ldap-config:/etc/ldap/slapd.d
    networks:
      - seaweedfs-test

  # Optional: LDAP Admin UI
  ldap-admin:
    image: osixia/phpldapadmin:latest
    container_name: ldap-admin-test
    environment:
      PHPLDAPADMIN_LDAP_HOSTS: "ldap-server"
      PHPLDAPADMIN_HTTPS: "false"
    ports:
      - "8080:80"
    depends_on:
      - ldap-server
    networks:
      - seaweedfs-test

volumes:
  master-data:
    driver: local
  volume-data:
    driver: local
  filer-data:
    driver: local
  ldap-data:
    driver: local
  ldap-config:
    driver: local
  test-results:
    driver: local

networks:
  seaweedfs-test:
    driver: bridge
    ipam:
      config:
        - subnet: 172.20.0.0/16
