# --- Stage 1: Build Frontend Assets ---
FROM node:20-alpine AS frontend
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

# --- Stage 2: Build Backend Dependencies ---
FROM php:8.2-fpm-alpine AS backend
WORKDIR /app

# Instalar dependencias del sistema para compilar extensiones
RUN apk add --no-cache \
    libxml2-dev \
    curl-dev \
    libzip-dev \
    libpng-dev \
    libjpeg-turbo-dev \
    freetype-dev \
    icu-dev \
    oniguruma-dev

# Instalar extensiones una por una con -j1 para reducir uso de memoria
RUN docker-php-ext-install -j1 soap
RUN docker-php-ext-install -j1 bcmath
RUN docker-php-ext-configure gd --with-freetype --with-jpeg && docker-php-ext-install -j1 gd
RUN docker-php-ext-install -j1 zip
RUN docker-php-ext-install -j1 intl
RUN docker-php-ext-install -j1 opcache
RUN docker-php-ext-install -j1 pdo_mysql

# Instalar Composer
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer

COPY composer.json composer.lock ./

# Instalar dependencias
RUN composer install --no-dev --no-scripts --no-autoloader --prefer-dist

COPY . .
RUN composer dump-autoload --optimize

# --- Stage 3: Production Image ---
FROM php:8.2-fpm-alpine

# Instalar dependencias de ejecución (Nginx, Supervisor y libs de PHP)
RUN apk add --no-cache \
    nginx \
    supervisor \
    libxml2 \
    libcurl \
    libzip \
    libpng \
    libjpeg-turbo \
    freetype \
    icu-libs \
    oniguruma

# Copiar extensiones PHP ya compiladas desde el stage backend (evita recompilar)
COPY --from=backend /usr/local/lib/php/extensions/ /usr/local/lib/php/extensions/
COPY --from=backend /usr/local/etc/php/conf.d/ /usr/local/etc/php/conf.d/

# Copiar configuraciones (Asegúrate de tener la carpeta 'docker' creada como te indiqué antes)
COPY docker/nginx.conf /etc/nginx/http.d/default.conf
COPY docker/php.ini /usr/local/etc/php/conf.d/custom.ini
COPY docker/supervisord.conf /etc/supervisord.conf
COPY docker/entrypoint.sh /usr/local/bin/entrypoint.sh

# Permisos de ejecución
RUN chmod +x /usr/local/bin/entrypoint.sh

# Directorio de trabajo
WORKDIR /var/www/html

# Copiar el código compilado desde las etapas anteriores
COPY --from=backend /app .
COPY --from=frontend /app/public/build ./public/build

# Crear carpetas necesarias y asignar permisos
RUN mkdir -p storage/framework/{sessions,views,cache} \
    && mkdir -p storage/logs \
    && mkdir -p storage/app/public \
    && chown -R www-data:www-data /var/www/html \
    && chmod -R 775 storage bootstrap/cache

# Exponer puerto
EXPOSE 80

# Comando de arranque
CMD ["/usr/local/bin/entrypoint.sh"]
