services:
  elecciones-api:
    build:
      context: ./Elecciones-Web
      dockerfile: src/Elecciones.Api/Dockerfile
    container_name: elecciones-api
    restart: unless-stopped
    env_file: ./.env
    # .NET expone el puerto 8080 por defecto en contenedores
    expose:
      - "8080" 
    networks:
      - elecciones-net
      - shared-net

  # Servicio del Worker (sin cambios)
  elecciones-worker:
    build:
      context: ./Elecciones-Web
      dockerfile: src/Elecciones.Worker/Dockerfile
    container_name: elecciones-worker
    restart: unless-stopped
    env_file: ./.env
    networks:
      - shared-net
    volumes:
      - ./logs-worker:/app/logs

  # Servicio del Frontend Público (sin cambios)
  elecciones-frontend:
    build:
      context: ./Elecciones-Web/frontend
      dockerfile: Dockerfile
    container_name: elecciones-frontend
    restart: unless-stopped
    expose:
      - "80"
    networks:
      - elecciones-net

  # --- Frontend Admin ---
  elecciones-frontend-admin:
    build:
      context: ./Elecciones-Web/frontend-admin
      dockerfile: Dockerfile
    container_name: elecciones-frontend-admin
    restart: unless-stopped
    expose:
      - "80"
    networks:
      - elecciones-net

  # Proxy Inverso que expone los servicios al exterior
  proxy:
    image: nginx:1.25-alpine
    container_name: elecciones-proxy
    restart: unless-stopped
    volumes:
      # Mapea nuestro archivo de configuración de proxy local al contenedor
      - ./proxy/nginx.conf:/etc/nginx/conf.d/default.conf
    ports:
      # Puerto para el sitio público/widgets
      - "8600:80"
      # --- NUEVO PUERTO: Puerto para el panel de administración ---
      - "8700:81"
    networks:
      - elecciones-net
    depends_on:
      - elecciones-api
      - elecciones-frontend
      - elecciones-frontend-admin

networks:
  elecciones-net:
    driver: bridge
  shared-net:
    external: true