# Multi-stage build para otimização
FROM node:18-alpine AS node-builder

WORKDIR /app
COPY package*.json ./
RUN npm install

FROM php:8.3-fpm-alpine AS php-base

# Instalar dependências do sistema
RUN apk add --no-cache \
    git \
    curl \
    libpng-dev \
    libjpeg-turbo-dev \
    freetype-dev \
    libzip-dev \
    zip \
    unzip \
    oniguruma-dev \
    libxml2-dev \
    postgresql-dev \
    icu-dev \
    gmp-dev \
    tidyhtml-dev \
    libxslt-dev \
    imagemagick-dev \
    imagemagick \
    autoconf \
    gcc \
    g++ \
    make

# Instalar extensões PHP
RUN docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-install -j$(nproc) \
        gd \
        pdo_mysql \
        pdo_pgsql \
        mbstring \
        exif \
        pcntl \
        bcmath \
        gmp \
        zip \
        intl \
        xml \
        soap \
        tidy \
        xsl

# Instalar Redis extension
RUN pecl install redis \
    && docker-php-ext-enable redis

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

# Instalar Node.js
RUN apk add --no-cache nodejs npm

# Definir diretório de trabalho
WORKDIR /var/www/html

# Copiar arquivos de dependências primeiro (para cache)
COPY composer.json composer.lock ./
COPY package*.json ./

# Instalar dependências PHP
RUN composer install --no-dev --optimize-autoloader --no-scripts

# Instalar dependências Node
RUN npm install

# Copiar código fonte
COPY . .

# Build dos assets
RUN npm run build

# Configurar permissões
RUN mkdir -p /var/www/html/bootstrap/cache \
    && chown -R www-data:www-data /var/www/html \
    && chmod -R 755 /var/www/html/storage \
    && chmod -R 755 /var/www/html/bootstrap/cache

# Criar usuário não-root
RUN addgroup -g 1000 -S www && \
    adduser -u 1000 -D -S -G www www

# Configurar PHP-FPM
RUN echo "pm.max_children = 50" >> /usr/local/etc/php-fpm.d/www.conf && \
    echo "pm.start_servers = 5" >> /usr/local/etc/php-fpm.d/www.conf && \
    echo "pm.min_spare_servers = 5" >> /usr/local/etc/php-fpm.d/www.conf && \
    echo "pm.max_spare_servers = 35" >> /usr/local/etc/php-fpm.d/www.conf

# Configurar PHP
RUN echo "memory_limit = 512M" >> /usr/local/etc/php/conf.d/docker-php-memory-limit.ini && \
    echo "upload_max_filesize = 100M" >> /usr/local/etc/php/conf.d/docker-php-upload.ini && \
    echo "post_max_size = 100M" >> /usr/local/etc/php/conf.d/docker-php-upload.ini

# Expor porta
EXPOSE 8000

# Comando padrão (será sobrescrito pelo docker-compose)
CMD ["php", "artisan", "serve", "--host=0.0.0.0", "--port=8000"]