services:
  postgres:
    image: ${REGISTRY:-127.0.0.1:5001}/mirror/postgres:16-alpine
    container_name: food-market-postgres
    restart: unless-stopped
    environment:
      POSTGRES_DB: food_market
      POSTGRES_USER: food_market
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-food_market_dev}
      PGDATA: /var/lib/postgresql/data/pgdata
    # Stage VM already uses 5432 (host postgres) — map ours to 5434 to avoid clash.
    ports:
      - "127.0.0.1:5434:5432"
    volumes:
      - postgres-data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U food_market -d food_market"]
      interval: 10s
      timeout: 5s
      retries: 5

  api:
    image: ${REGISTRY:-127.0.0.1:5001}/food-market-api:${API_TAG:-latest}
    container_name: food-market-api
    restart: unless-stopped
    depends_on:
      postgres:
        condition: service_healthy
    environment:
      ASPNETCORE_ENVIRONMENT: Production
      ConnectionStrings__Default: Host=postgres;Port=5432;Database=food_market;Username=food_market;Password=${POSTGRES_PASSWORD:-food_market_dev}
    # Host port mapping: pick free ports on existing stage server (80/443 taken by
    # legacy nginx, 5000/5002/5005 taken by legacy .NET apps).
    ports:
      - "8080:8080"  # api

    volumes:
      - api-data:/app/App_Data
      - api-logs:/app/logs
      - /opt/food-market-data/uploads:/app/uploads

  web:
    image: ${REGISTRY:-127.0.0.1:5001}/food-market-web:${WEB_TAG:-latest}
    container_name: food-market-web
    restart: unless-stopped
    depends_on:
      - api
    ports:
      - "8081:80"  # web SPA, not on 80 (legacy nginx holds it)

  public:
    image: ${REGISTRY:-127.0.0.1:5001}/food-market-public:${PUBLIC_TAG:-latest}
    container_name: food-market-public
    restart: unless-stopped
    ports:
      - "8082:80"  # marketing astro static

volumes:
  postgres-data:
    name: food-market-postgres-data
  api-data:
    name: food-market-api-data
  api-logs:
    name: food-market-api-logs

