FROM php:8.3-fpm

RUN apt-get clean && apt-get -y autoremove && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

RUN apt-get update && apt-get install -y \
    zlib1g-dev libzip-dev git libcurl3-dev curl libgl1 libglib2.0-0 \
    libfreetype6-dev libjpeg62-turbo-dev libpng-dev \
    imagemagick libmagickwand-dev libicu-dev g++ zip unzip sox ffmpeg libsox-fmt-mp3 \
    wget gnupg libpq-dev

RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \
    && apt-get install -y nodejs \
    && npm install -g npm@latest

RUN docker-php-ext-install calendar zip curl pdo_mysql pdo_pgsql exif pcntl gd bcmath intl
RUN docker-php-ext-configure gd --with-freetype --with-jpeg && docker-php-ext-install gd
RUN pecl install imagick && docker-php-ext-enable imagick
RUN pecl install redis && docker-php-ext-enable redis

RUN apt-get clean && apt-get -y autoremove && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

ENV COMPOSER_ALLOW_SUPERUSER=1
RUN php -r "readfile('http://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer
RUN chmod 0755 /usr/bin/composer

RUN yes | pecl install xdebug \
    && docker-php-ext-enable xdebug \
    && echo "xdebug.mode=debug,coverage" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
    && echo "xdebug.idekey=VSCODE"       >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
    && echo "xdebug.start_with_request=yes" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
    && echo "xdebug.log=/var/www/xdebug.log" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
    && touch /var/www/xdebug.log \
    && chown www-data:www-data /var/www/xdebug.log \
    && chmod 777 /var/www/xdebug.log

# Configure PHP upload limits for large story packages
RUN echo "upload_max_filesize = 100M" >> /usr/local/etc/php/conf.d/uploads.ini \
    && echo "post_max_size = 105M" >> /usr/local/etc/php/conf.d/uploads.ini \
    && echo "memory_limit = 256M" >> /usr/local/etc/php/conf.d/uploads.ini \
    && echo "max_execution_time = 300" >> /usr/local/etc/php/conf.d/uploads.ini \
    && echo "max_input_time = 300" >> /usr/local/etc/php/conf.d/uploads.ini


WORKDIR /var/www/
ARG user=appuser
ARG group=appuser
ARG uid=1000
ARG gid=1000
RUN groupadd -g ${gid} ${group} && useradd -u ${uid} -g ${group} -s /bin/sh -m ${user}
RUN chown ${uid}:${gid} /var/www

RUN echo "alias pint='./vendor/bin/pint'" >> /home/${user}/.bashrc && \
    echo "alias phpstan='./vendor/bin/phpstan analyse'" >> /home/${user}/.bashrc && \
    echo "alias artisan='php artisan'" >> /home/${user}/.bashrc && \
    chown ${uid}:${gid} /home/${user}/.bashrc


USER ${uid}:${gid}

COPY ./docker/php/entrypoint.sh /usr/local/bin/docker-entrypoint.sh
USER root
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
USER ${uid}:${gid}
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]

EXPOSE 5173
EXPOSE 3000
