# ===========================================
# DOCKERFILE POUR LA PRODUCTION
# Microservice de Recherche Intelligente
# ===========================================

FROM php:8.3-fpm-alpine

# Informations du mainteneur
LABEL maintainer="votre-email@exemple.com"
LABEL version="1.0.0"
LABEL description="Microservice de recherche intelligente avec IA"

# ===========================================
# VARIABLES D'ENVIRONNEMENT
# ===========================================

ENV APP_ENV=prod
ENV APP_DEBUG=0
ENV COMPOSER_ALLOW_SUPERUSER=1

# ===========================================
# INSTALLATION DES DÉPENDANCES SYSTÈME
# ===========================================

RUN apk add --no-cache \
    curl \
    git \
    zip \
    unzip \
    libzip-dev \
    icu-dev \
    oniguruma-dev \
    libxml2-dev \
    postgresql-dev \
    nginx \
    supervisor

# ===========================================
# INSTALLATION DES EXTENSIONS PHP
# ===========================================

RUN docker-php-ext-install \
    pdo \
    pdo_pgsql \
    intl \
    zip \
    opcache \
    mbstring \
    xml

# Configuration OPcache pour la production
RUN { \
    echo 'opcache.enable=1'; \
    echo 'opcache.memory_consumption=256'; \
    echo 'opcache.interned_strings_buffer=16'; \
    echo 'opcache.max_accelerated_files=20000'; \
    echo 'opcache.revalidate_freq=0'; \
    echo 'opcache.validate_timestamps=0'; \
    echo 'opcache.save_comments=1'; \
    echo 'opcache.fast_shutdown=1'; \
} > /usr/local/etc/php/conf.d/opcache.ini

# ===========================================
# INSTALLATION DE COMPOSER
# ===========================================

COPY --from=composer:2 /usr/bin/composer /usr/bin/composer

# ===========================================
# CONFIGURATION DE L'UTILISATEUR
# ===========================================

RUN addgroup -g 1000 -S appgroup && \
    adduser -u 1000 -S appuser -G appgroup

# ===========================================
# CONFIGURATION DU RÉPERTOIRE DE TRAVAIL
# ===========================================

WORKDIR /app

# ===========================================
# COPIE ET INSTALLATION DES DÉPENDANCES
# ===========================================

# Copier les fichiers de configuration Composer
COPY composer.json composer.lock ./

# Installer les dépendances (production uniquement)
RUN composer install --no-dev --optimize-autoloader --no-scripts --no-interaction

# ===========================================
# COPIE DU CODE SOURCE
# ===========================================

COPY . .

# ===========================================
# OPTIMISATIONS POUR LA PRODUCTION
# ===========================================

# Générer le cache Symfony
RUN php bin/console cache:clear --env=prod --no-debug
RUN php bin/console cache:warmup --env=prod --no-debug

# ===========================================
# CONFIGURATION DES PERMISSIONS
# ===========================================

RUN chown -R appuser:appgroup /app
RUN chmod -R 755 /app
RUN chmod -R 777 /app/var

# ===========================================
# CONFIGURATION NGINX
# ===========================================

COPY nginx/default.conf /etc/nginx/conf.d/default.conf

# ===========================================
# CONFIGURATION SUPERVISOR
# ===========================================

COPY supervisor/supervisord.conf /etc/supervisor/conf.d/supervisord.conf

# ===========================================
# EXPOSITION DES PORTS
# ===========================================

EXPOSE 8003
EXPOSE 80

# ===========================================
# CONFIGURATION DE L'UTILISATEUR FINAL
# ===========================================

USER appuser

# ===========================================
# COMMANDE DE DÉMARRAGE
# ===========================================

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

# ===========================================
# HEALTHCHECK
# ===========================================

HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \
    CMD curl -f http://localhost:8003/api/search/health || exit 1