name: ${COMPOSE_PROJECT_NAME:-ehv-decision-main}

services:
  postgres:
    image: postgres:16-alpine
    container_name: ${COMPOSE_PROJECT_NAME:-ehv-decision-main}-postgres
    restart: always
    environment:
      POSTGRES_DB: ${POSTGRES_DB:-libredecision}
      POSTGRES_USER: ${POSTGRES_USER:-libredecision}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
    volumes:
      - postgres-data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-libredecision} -d ${POSTGRES_DB:-libredecision}"]
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 30s
    networks:
      - libredecision
    # Pas de label SERVICE_* : postgres non exposé publiquement

  backend:
    image: libredecision-backend:latest
    container_name: ${COMPOSE_PROJECT_NAME:-ehv-decision-main}-backend
    restart: always
    depends_on:
      postgres:
        condition: service_healthy
    environment:
      DATABASE_URL: postgresql+asyncpg://${POSTGRES_USER:-libredecision}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB:-libredecision}
      SECRET_KEY: ${SECRET_KEY}
      ENVIRONMENT: production
      DEBUG: "false"
      DEMO_MODE: ${DEMO_MODE:-true}
      CORS_ORIGINS: '["https://${APP_DOMAIN:-decision.librodrome.org}"]'
      DUNITER_RPC_URL: ${DUNITER_RPC_URL:-wss://gdev.p2p.legal/ws}
      IPFS_API_URL: http://ipfs:5001
      IPFS_GATEWAY_URL: http://ipfs:8080
    labels:
      # Registrator enregistre dans Consul, Fabio route automatiquement
      - SERVICE_8002_NAME=${COMPOSE_PROJECT_NAME:-ehv-decision-main}-backend-8002
      - SERVICE_8002_TAGS=urlprefix-${APP_DOMAIN:-decision.librodrome.org}/api/*
      # TCP : HTTP check échoue si le service redirige (301/302)
      - SERVICE_8002_CHECK_TCP=true
    networks:
      - libredecision
      - sonic

  frontend:
    image: libredecision-frontend:latest
    container_name: ${COMPOSE_PROJECT_NAME:-ehv-decision-main}-frontend
    restart: always
    depends_on:
      - backend
    environment:
      NUXT_PUBLIC_API_BASE: https://${APP_DOMAIN:-decision.librodrome.org}/api/v1
    labels:
      - SERVICE_3000_NAME=${COMPOSE_PROJECT_NAME:-ehv-decision-main}-frontend-3000
      - SERVICE_3000_TAGS=urlprefix-${APP_DOMAIN:-decision.librodrome.org}/*
      - SERVICE_3000_CHECK_TCP=true
    networks:
      - sonic

  ipfs:
    image: ipfs/kubo:latest
    container_name: ${COMPOSE_PROJECT_NAME:-ehv-decision-main}-ipfs
    restart: always
    volumes:
      - ipfs-data:/data/ipfs
    networks:
      - libredecision
    # Pas de label SERVICE_* : ipfs non exposé publiquement

volumes:
  postgres-data:
  ipfs-data:

networks:
  libredecision:
    driver: bridge
  sonic:
    external: true
