FROM php:8.3-fpm-alpine

LABEL maintainer="Infra Manager"

# Build arguments
ARG NODE_VERSION=22
ARG USER_ID=1000
ARG GROUP_ID=1000

# Install system dependencies
RUN apk add --no-cache \
    bash \
    curl \
    git \
    icu-dev \
    libzip-dev \
    linux-headers \
    oniguruma-dev \
    openssl-dev \
    sqlite \
    sqlite-dev \
    supervisor \
    unzip \
    zip \
    libpng-dev \
    libjpeg-turbo-dev \
    freetype-dev \
    shadow \
    nodejs \
    npm

# Install PHP extensions
RUN docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-install \
        bcmath \
        exif \
        gd \
        intl \
        mbstring \
        opcache \
        pcntl \
        pdo \
        pdo_sqlite \
        zip

# Install pdo_mysql for later MySQL migration
RUN apk add --no-cache mysql-client \
    && docker-php-ext-install pdo_mysql

# Install Redis extension
RUN apk add --no-cache --virtual .build-deps $PHPIZE_DEPS \
    && pecl install redis \
    && docker-php-ext-enable redis \
    && apk del .build-deps

# Install Composer
COPY --from=composer:2.7 /usr/bin/composer /usr/bin/composer

# Configure opcache
RUN docker-php-ext-enable opcache
COPY docker/php/opcache.ini /usr/local/etc/php/conf.d/opcache.ini

# PHP configuration
COPY docker/php/php.ini /usr/local/etc/php/conf.d/custom.ini

# Create application user
RUN addgroup -g ${GROUP_ID} appgroup 2>/dev/null || true \
    && adduser -u ${USER_ID} -G appgroup -s /bin/bash -D appuser 2>/dev/null || true

# Set working directory
WORKDIR /var/www/html

# Copy application
COPY --chown=appuser:appgroup . .

# Install PHP dependencies
RUN composer install --no-dev --optimize-autoloader --no-interaction 2>/dev/null || \
    composer install --optimize-autoloader --no-interaction

# Install Node dependencies and build assets
RUN npm ci && npm run build

# Set permissions
RUN chown -R appuser:appgroup /var/www/html \
    && chmod -R 755 /var/www/html/storage \
    && chmod -R 755 /var/www/html/bootstrap/cache

USER appuser

EXPOSE 9000

CMD ["php-fpm"]
