# === ETAPA 1: Compilación del Frontend ===
FROM node:20 AS frontend-builder
WORKDIR /build

# Actualizar npm a la última versión para corregir bugs conocidos con dependencias opcionales
RUN npm install -g npm@latest

# Copiar solo el package.json para evitar conflictos de arquitectura con el lockfile
COPY front/tailadmin-free-tailwind-dashboard-template-main/package.json ./
RUN npm install

# Forzar la instalación del binding nativo de Tailwind v4 (Oxide) para Linux x64 gnu (evita el bug de dependencias opcionales en Docker)
RUN npm install @tailwindcss/oxide-linux-x64-gnu --save-dev

# Copiar el resto del código del frontend
COPY front/tailadmin-free-tailwind-dashboard-template-main/ ./
# Eliminar el package-lock.json para asegurar que webpack compile usando las dependencias de Linux recién descargadas
RUN rm -f package-lock.json
RUN npm run build

# === ETAPA 2: Entorno de Producción Web + PHP ===
# Imagen ligera con Nginx y PHP-FPM integrados
FROM trafex/php-nginx:latest
WORKDIR /var/www/html

USER root

# Instalar dependencias necesarias de PHP detectando automáticamente la versión instalada (ej. php83, php84, php85)
RUN PHP_VERSION=$(php -r 'echo PHP_MAJOR_VERSION . PHP_MINOR_VERSION;') \
    && apk add --no-cache \
       php${PHP_VERSION}-mysqli \
       php${PHP_VERSION}-gd \
       php${PHP_VERSION}-mbstring \
       php${PHP_VERSION}-xml \
       php${PHP_VERSION}-ctype \
       php${PHP_VERSION}-iconv \
       curl

# Crear un redireccionador PHP en la raíz para enviar al usuario al frontend automáticamente
RUN echo '<?php header("Location: /mesa-ayuda/app/index.html"); exit; ?>' > /var/www/html/index.php

# Crear la estructura de directorios requerida
RUN mkdir -p /var/www/html/mesa-ayuda

# Copiar código del backend
COPY api/ /var/www/html/mesa-ayuda/api/

# Copiar archivos estáticos compilados del frontend a la carpeta app/
COPY --from=frontend-builder /build/build/ /var/www/html/mesa-ayuda/app/

# Descargar dependencias PHP mediante Composer directamente en el directorio correcto de la app
COPY composer.json composer.lock /var/www/html/mesa-ayuda/
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \
    && cd /var/www/html/mesa-ayuda \
    && composer install --no-dev --optimize-autoloader --no-interaction

# Crear directorio de subidas y configurar permisos para el servidor web (usuario nobody) después de instalar Composer
RUN mkdir -p /var/www/html/mesa-ayuda/uploads/tickets \
    && chown -R nobody:nobody /var/www/html \
    && chmod -R 775 /var/www/html/mesa-ayuda/uploads

# Regresar al usuario sin privilegios por seguridad
USER nobody

# Puerto expuesto por el contenedor por defecto en la imagen base trafex/php-nginx
EXPOSE 8080
