# ============================================================
# CXP — Dockerfile de Producción (multi-stage)
# ============================================================
# Imagen final: PHP 8.5-FPM + app compilada (~250MB)
# Sin Node.js, sin dev deps, sin fuentes JS
#
# Build:  docker build -f Dockerfile.prod -t cxp-app:latest .
# Push:   docker push registry.example.com/cxp-app:latest
# ============================================================

# ── Stage 1: Builder ────────────────────────────────────────
FROM php:8.5-fpm AS builder

RUN apt-get update && apt-get install -y \
    git unzip libpq-dev libzip-dev zip curl gnupg \
    libpng-dev libjpeg-dev libfreetype6-dev \
    && docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-install pdo pdo_mysql zip gd \
    && rm -rf /var/lib/apt/lists/*

RUN curl -fsSL https://deb.nodesource.com/setup_24.x | bash - \
    && apt-get update && apt-get install -y nodejs \
    && rm -rf /var/lib/apt/lists/*

COPY --from=composer:2 /usr/bin/composer /usr/bin/composer

WORKDIR /build

# PHP deps (sin dev)
COPY composer.json composer.lock ./
RUN composer install --no-interaction --no-scripts --optimize-autoloader --no-dev

# JS deps + compilar assets
COPY package.json package-lock.json webpack.config.js ./
COPY tailwind.config.js postcss.config.js ./
COPY assets ./assets
COPY templates ./templates
RUN (npm ci --ignore-scripts || npm install --ignore-scripts) && npm run build

# Copiar código fuente completo
COPY . .
RUN composer dump-autoload --optimize --no-dev --classmap-authoritative

# ── Stage 2: Runtime ────────────────────────────────────────
FROM php:8.5-fpm AS runtime

LABEL maintainer="SistemasMB" \
      app="cxp" \
      description="Cuentas por Pagar — Producción"

RUN apt-get update && apt-get install -y \
    libpq-dev libzip-dev libpng-dev libjpeg-dev libfreetype6-dev \
    default-mysql-client netcat-openbsd \
    && docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-install pdo pdo_mysql zip gd \
    && rm -rf /var/lib/apt/lists/*

# PHP producción
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
RUN { \
    echo 'upload_max_filesize = 20M'; \
    echo 'post_max_size = 25M'; \
    echo 'memory_limit = 256M'; \
    echo 'max_execution_time = 60'; \
    echo 'date.timezone = America/Guatemala'; \
    echo 'opcache.enable = 1'; \
    echo 'opcache.memory_consumption = 128'; \
    echo 'opcache.max_accelerated_files = 10000'; \
    echo 'opcache.validate_timestamps = 0'; \
} > "$PHP_INI_DIR/conf.d/99-cxp.ini"

WORKDIR /var/www/html

# Copiar app compilada
COPY --from=builder /build/vendor ./vendor
COPY --from=builder /build/public/build ./public/build
COPY --from=builder /build/bin ./bin
COPY --from=builder /build/config ./config
COPY --from=builder /build/migrations ./migrations
COPY --from=builder /build/src ./src
COPY --from=builder /build/templates ./templates
COPY --from=builder /build/translations ./translations
COPY --from=builder /build/public/index.php ./public/index.php
COPY --from=builder /build/.env ./.env
COPY --from=builder /build/composer.json ./composer.json
COPY --from=builder /build/composer.lock ./composer.lock
COPY --from=builder /build/sql ./sql

# Entrypoint
COPY docker/entrypoint.prod.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh

# Directorios con permisos
RUN mkdir -p var/cache var/log public/uploads/adjuntos \
    && chown -R www-data:www-data var public/uploads

EXPOSE 9000
CMD ["/entrypoint.sh"]
