FROM php:8.4-fpm-alpine

# تنظیم میرور اران
RUN echo "https://mirror.arvancloud.ir/alpine/v3.21/main" > /etc/apk/repositories && \
    echo "https://mirror.arvancloud.ir/alpine/v3.21/community" >> /etc/apk/repositories && \
    apk update

# نصب dependencies سیستمی
RUN apk add --no-cache \
    postgresql-dev \
    libzip-dev \
    libpng-dev \
    libjpeg-turbo-dev \
    freetype-dev \
    oniguruma-dev \
    zip \
    unzip \
    git \
    curl \
    nginx \
    supervisor \
    nodejs \
    npm \
    $PHPIZE_DEPS

# نصب اکستنشن‌های PHP
RUN docker-php-ext-configure gd --with-freetype --with-jpeg && \
    docker-php-ext-install -j$(nproc) \
        pdo \
        pdo_pgsql \
        zip \
        gd \
        mbstring \
        opcache

# نصب Redis extension
RUN pecl install redis && \
    docker-php-ext-enable redis && \
    apk del $PHPIZE_DEPS

# نصب Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

WORKDIR /var/www/html

# تنظیم Git safe directory
RUN git config --global --add safe.directory /var/www/html

# کپی فایل‌های dependency
COPY composer.json composer.lock package.json package-lock.json ./

# نصب PHP dependencies
RUN composer install --no-dev --no-scripts --no-autoloader --prefer-dist

# نصب Node dependencies
RUN npm ci --prefer-offline --no-audit

# کپی کل پروژه
COPY . .

# تولید autoloader
RUN composer dump-autoload --optimize --classmap-authoritative

# بیلد assets
RUN NODE_OPTIONS="--max-old-space-size=2048" npm run build && \
    npm cache clean --force && \
    rm -rf node_modules

# تنظیم دسترسی‌ها
RUN chown -R www-data:www-data /var/www/html/storage /var/www/html/bootstrap/cache && \
    chmod -R 775 /var/www/html/storage /var/www/html/bootstrap/cache

# کپی تنظیمات nginx و supervisor
COPY docker/nginx.conf /etc/nginx/nginx.conf
COPY docker/supervisord.conf /etc/supervisord.conf

# تنظیمات Opcache
RUN echo "opcache.enable=1" >> /usr/local/etc/php/conf.d/opcache.ini && \
    echo "opcache.memory_consumption=256" >> /usr/local/etc/php/conf.d/opcache.ini && \
    echo "opcache.interned_strings_buffer=16" >> /usr/local/etc/php/conf.d/opcache.ini && \
    echo "opcache.max_accelerated_files=20000" >> /usr/local/etc/php/conf.d/opcache.ini && \
    echo "opcache.validate_timestamps=0" >> /usr/local/etc/php/conf.d/opcache.ini && \
    echo "opcache.save_comments=1" >> /usr/local/etc/php/conf.d/opcache.ini && \
    echo "opcache.fast_shutdown=1" >> /usr/local/etc/php/conf.d/opcache.ini

# تنظیمات PHP
RUN echo "upload_max_filesize=50M" >> /usr/local/etc/php/conf.d/uploads.ini && \
    echo "post_max_size=50M" >> /usr/local/etc/php/conf.d/uploads.ini && \
    echo "memory_limit=512M" >> /usr/local/etc/php/conf.d/memory.ini

EXPOSE 80

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