services:
  backend:
    container_name: ranking_backend
    build:
      context: ./backend
      dockerfile: Dockerfile
    depends_on:
      oracle18c:
        condition: service_healthy
    ports:
      - "8010:8000"
    env_file:
      - ./backend/.env
    extra_hosts:
      - "host.docker.internal:host-gateway"
    environment:
      - API_HOST=0.0.0.0
      - API_PORT=8000
      - API_RELOAD=true
      - CORS_ORIGINS=http://localhost:5173,http://frontend:5173,http://localhost:4200,http://127.0.0.1:4200
      - LOG_LEVEL=INFO
    volumes:
      - ./backend/src:/app/src
      - ./backend/scripts:/app/scripts
      - ./backend/static:/app/static
      - /etc/localtime:/etc/localtime:ro
    networks:
      - shared_network
    restart: unless-stopped

  frontend:
    container_name: ranking_frontend
    build:
      context: ./frontend
      dockerfile: Dockerfile
    ports:
      - "5173:5173"
    environment:
      - VITE_HOST_ATUACAPES=${HOST_ATUACAPES:-https://atuacapes.capes.gov.br}
    volumes:
      - ./frontend/src:/app/src
      - ./frontend/public:/app/public
      - ./frontend/index.html:/app/index.html
      - ./frontend/vite.config.js:/app/vite.config.js
      - /etc/localtime:/etc/localtime:ro
    links:
      - backend
    networks:
      - shared_network
    restart: unless-stopped
    
  oracle18c:
    container_name: oracle18c
    image: gvenzl/oracle-xe:18-slim
    environment:
      - ORACLE_PASSWORD=local123
      - ORACLE_CHARACTERSET=AL32UTF8
      - APP_USER=local123
      - APP_USER_PASSWORD=local123
      - TZ=America/Sao_Paulo
    ports:
      - "1521:1521"
      - "5500:5500"
    volumes:
      - oracle_data:/opt/oracle/oradata
    healthcheck:
      test: ["CMD", "bash", "-c", "echo 'SELECT 1 FROM DUAL;' | sqlplus -s local123/local123@localhost:1521/XEPDB1 | grep -q 1"]
      interval: 10s
      timeout: 5s
      retries: 30
      start_period: 60s
    networks:
      - shared_network    

networks:
  shared_network:
    external: true

volumes:
  oracle_data:
    driver: local
