# PHP-FPM. O servidor web é o nginx, em container separado, espelhando a
# produção. Consequência importante: o public/.htaccess é inerte — o nginx não
# lê esse arquivo. Todo o roteamento e toda a proteção de caminho vivem em
# docker/nginx/default.conf.
ARG PHP_VERSION=8.1
FROM php:${PHP_VERSION}-fpm

RUN apt-get update && apt-get install -y --no-install-recommends \
        libicu-dev \
        libzip-dev \
        libpng-dev \
        libjpeg62-turbo-dev \
        libfreetype6-dev \
        libgmp-dev \
        libxml2-dev \
        libpq-dev \
        unzip \
        git \
        default-mysql-client \
        postgresql-client \
    && rm -rf /var/lib/apt/lists/*

RUN docker-php-ext-configure gd --with-jpeg --with-freetype \
    && docker-php-ext-install -j"$(nproc)" \
        pdo_mysql \
        mysqli \
        intl \
        zip \
        gd \
        gmp \
        bcmath \
        exif \
        opcache

# Instalado desde já para a Fase 1 (migração para PostgreSQL): permite apontar
# o Doctrine para o Postgres e rodar os dois bancos em paralelo sem rebuild.
RUN docker-php-ext-install -j"$(nproc)" pdo_pgsql pgsql

# Composer 2.2 (LTS), e não o mais recente: o composer.lock foi gerado com
# plugin-api 2.2.0 e o laminas/laminas-dependency-plugin exige plugin-api < 2.3.
# Com Composer 2.3+ o plugin é ignorado e o install falha.
COPY --from=composer:2.2 /usr/bin/composer /usr/bin/composer

# PHPUnit como phar, de propósito: adicionar phpunit ao composer.json exigiria
# reresolver o composer.lock. O phar deixa os testes de contrato disponíveis sem
# tocar nas dependências da aplicação. PHPUnit 10.5 é a última linha que suporta
# PHP 8.1. (O lock prendia o PHP no 8.1 pelo laminas-cache 3.6.0 até 08/11/2026;
# desde a fatia 130, o D11, aceita do 8.1 ao 8.3, e a suíte passou numa imagem
# feita com --build-arg PHP_VERSION=8.2. O padrão segue 8.1, o da produção.)
RUN curl -sSL -o /usr/local/bin/phpunit https://phar.phpunit.de/phpunit-10.5.phar \
    && chmod +x /usr/local/bin/phpunit

WORKDIR /var/www/html

# O entrypoint cria os diretorios de escrita que o .gitignore mantem fora do
# repositorio. Fica por ultimo de proposito: editar este script nao invalida as
# camadas caras de apt-get e docker-php-ext-install.
COPY entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod +x /usr/local/bin/entrypoint.sh

ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
CMD ["php-fpm"]
