# Despliegue en testing.crm.aduanasoft.com — AUTH REAL vía Hub (SSO relay).
# Frontend: build de PRODUCCIÓN (Dockerfile.prod → node build). Backend: uvicorn sin --reload.
# Puertos SOLO en loopback (nginx del host hace TLS + proxy). Postgres/MinIO no se publican.
#
#   docker compose -f docker-compose.yml -f deploy/docker-compose.testing.yml up -d --build
services:
  backend:
    # DNS por-contenedor: el resolver del host no es alcanzable desde los contenedores;
    # el backend debe resolver workspace.aduanasoft.com (Hub) en runtime.
    dns:
      - "8.8.8.8"
      - "1.1.1.1"
    ports: !override
      - "127.0.0.1:8000:8000"
    # Sesión local del CRM (patrón SIWEB). El backend toma su config de esta lista
    # (no lee el .env dentro del contenedor), así que los flags van aquí. Valores
    # desde el .env por sustitución. SESSION_STORE_ENABLED=false revierte al comportamiento previo.
    environment:
      - SESSION_STORE_ENABLED=${SESSION_STORE_ENABLED:-true}
      - SESSION_IDLE_MINUTES=${SESSION_IDLE_MINUTES:-30}
      - SESSION_MAX_HOURS=${SESSION_MAX_HOURS:-10}
    command: ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000", "--log-level", "info"]

  frontend:
    dns:
      - "8.8.8.8"
      - "1.1.1.1"
    build:
      context: ./frontend
      dockerfile: Dockerfile.prod
      args:
        VITE_API_URL: ${VITE_API_URL}
        VITE_HUB_URL: ${VITE_HUB_URL}
        VITE_KEYCLOAK_URL: ${VITE_KEYCLOAK_URL}
        VITE_KEYCLOAK_REALM: ${KEYCLOAK_REALM:-master}
        VITE_KEYCLOAK_CLIENT_ID: ${KEYCLOAK_CLIENT_ID:-aduanasoft}
    environment:
      - NODE_ENV=production
      # El callback OIDC (/auth/callback) intercambia el código por tokens con el
      # secret del client confidencial 'aduanasoft'. El compose base no lo pasa al frontend.
      - KEYCLOAK_CLIENT_SECRET=${KEYCLOAK_CLIENT_SECRET:-}
    volumes: !override []
    command: !override ["node", "build/index.js"]
    ports: !override
      - "127.0.0.1:5173:5173"

  postgres:
    ports: !override []

  minio:
    ports: !override []

# En el server no existe el Hub local: app-hub deja de ser red externa y se crea local.
# El CRM alcanza el Hub por su URL pública (workspace.aduanasoft.com), no por esta red.
networks:
  app-hub:
    external: false
    driver: bridge
