# ============================================
# MakLinkApp – Dockerfile
# Node.js + PHP + Python multi-stage build
# ============================================

# --- Stage 1: Node.js frontend build ---
FROM node:20-alpine AS frontend-build
WORKDIR /build
COPY frontend/package*.json ./
RUN npm ci --omit=dev
COPY frontend/ ./
RUN npm run build 2>/dev/null || echo "No build step – using static files"

# --- Stage 2: PHP backend base ---
FROM php:8.3-fpm-alpine AS backend-php
RUN apk add --no-cache \
    libzip-dev freetype-dev libjpeg-turbo-dev libpng-dev \
    && docker-php-ext-install pdo pdo_mysql zip opcache

# Install Composer
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
WORKDIR /app/backend
COPY backend/composer*.json ./
RUN composer install --no-dev --optimize-autoloader 2>/dev/null || echo "No composer.json – skipping"
COPY backend/ ./

# --- Stage 3: Python Flask API ---
FROM python:3.12-slim AS backend-python
WORKDIR /app/python
COPY backend/requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY backend/ ./

# --- Stage 4: Final production image (Nginx + PHP-FPM + Node) ---
FROM nginx:1.27-alpine AS production

# Install PHP-FPM, Python, Supervisor
RUN apk add --no-cache \
    php83 php83-fpm php83-pdo php83-pdo_mysql php83-session php83-json \
    python3 py3-pip supervisor curl

# Copy frontend
COPY --from=frontend-build /build /usr/share/nginx/html

# Copy backend
COPY --from=backend-php  /app/backend /var/www/backend
COPY --from=backend-python /app/python /var/www/python

# Nginx config
COPY docker/nginx.conf /etc/nginx/nginx.conf

# Supervisor config (runs nginx + php-fpm + gunicorn)
COPY docker/supervisord.conf /etc/supervisord.conf

# Expose port
EXPOSE 80

# Health check
HEALTHCHECK --interval=30s --timeout=10s --start-period=15s --retries=3 \
  CMD curl -f http://localhost/health || exit 1

CMD ["/usr/bin/supervisord", "-c", "/etc/supervisord.conf"]
