FROM composer:2 AS vendor

WORKDIR /app

COPY composer.json composer.lock symfony.lock ./
RUN composer install \
    --no-interaction \
    --prefer-dist \
    --no-progress \
    --no-dev \
    --optimize-autoloader \
    --no-scripts

FROM node:24-alpine AS assets

WORKDIR /app/assets

COPY assets/package.json assets/package-lock.json ./
RUN npm ci

COPY assets ./
COPY templates ../templates

RUN mkdir -p /app/public/default \
    && npm run build \
    && rm -rf node_modules

FROM php:8.4-apache

RUN apt-get update \
    && apt-get install -y --no-install-recommends libicu-dev libzip-dev ca-certificates \
    && docker-php-ext-install intl pdo_mysql \
    && a2enmod rewrite \
    && sed -ri 's!/var/www/html!/var/www/html/public!g' /etc/apache2/sites-available/*.conf \
    && sed -ri '/<Directory \/var\/www\/>/,/<\/Directory>/ s/AllowOverride None/AllowOverride All/' /etc/apache2/apache2.conf \
    && printf '%s\n' \
      '<Directory /var/www/html/public>' \
      '    Require all granted' \
      '    AllowOverride All' \
      '    FallbackResource /index.php' \
      '</Directory>' \
      'SetEnvIfNoCase Authorization "^(.*)$" HTTP_AUTHORIZATION=$1' \
      > /etc/apache2/conf-available/symfony.conf \
    && a2enconf symfony \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /var/www/html

ENV WEBSOCKET_URI=http://dart_traefik

COPY --from=vendor /app/vendor ./vendor
COPY . .
COPY --from=assets /app/public/default ./public/default
COPY docker/entrypoint.sh /usr/local/bin/app-entrypoint

RUN chmod +x /usr/local/bin/app-entrypoint \
    && [ -f .env ] || touch .env \
    && mkdir -p var/cache var/log var/sessions \
    && chown -R www-data:www-data var

EXPOSE 80

ENTRYPOINT ["app-entrypoint"]
CMD ["apache2-foreground"]
