FROM node:20-alpine

WORKDIR /app

# Install dependencies first for better layer caching
COPY backend/package*.json /app/backend/
RUN cd /app/backend && npm ci --omit=dev

COPY frontend/package*.json /app/frontend/
RUN cd /app/frontend && npm ci

# Copy source code
COPY backend /app/backend
COPY frontend /app/frontend

# Build frontend with configurable API endpoint
ARG VITE_API_URL=http://98.80.225.96:5000/api
ENV VITE_API_URL=${VITE_API_URL}
RUN cd /app/frontend && npm run build

# Static file server for frontend
RUN npm install -g serve

# Runtime defaults (override with -e at docker run)
ENV NODE_ENV=production \
    PORT=5000 \
    API_PREFIX=/api \
    DB_HOST=host.docker.internal \
    DB_PORT=3306 \
    DB_USER=root \
    DB_PASSWORD= \
    DB_NAME=numerology_master \
    CORS_ORIGIN=http://localhost:3000

# Start backend and frontend in a single container
RUN cat > /usr/local/bin/start.sh <<'SH' && chmod +x /usr/local/bin/start.sh
#!/bin/sh
set -eu

node /app/backend/server.js &
BACKEND_PID=$!

serve -s /app/frontend/dist -l 3000 &
FRONTEND_PID=$!

trap 'kill -TERM "$BACKEND_PID" "$FRONTEND_PID" 2>/dev/null || true' INT TERM
wait -n "$BACKEND_PID" "$FRONTEND_PID"
SH

EXPOSE 3000 5000
CMD ["/usr/local/bin/start.sh"]
