FROM php:8.2-apache

# ─── System dependencies ──────────────────────────────────────────
RUN apt-get update && apt-get install -y --no-install-recommends \
        git curl ca-certificates gnupg zip unzip default-mysql-client \
        libpng-dev libzip-dev libxml2-dev libonig-dev libsqlite3-dev libcurl4-openssl-dev \
    && apt-get clean && rm -rf /var/lib/apt/lists/*

# ─── Node.js 20 LTS + npm (untuk Vite / Tailwind / asset build) ───
RUN mkdir -p /etc/apt/keyrings \
    && curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \
    && echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" \
       > /etc/apt/sources.list.d/nodesource.list \
    && apt-get update && apt-get install -y --no-install-recommends nodejs \
    && apt-get clean && rm -rf /var/lib/apt/lists/* \
    && node --version && npm --version

# ─── PHP extensions ───────────────────────────────────────────────
RUN docker-php-ext-install \
        pdo_mysql pdo_sqlite mbstring xml zip gd bcmath

# ─── Apache config ────────────────────────────────────────────────
RUN a2enmod rewrite headers
COPY docker/apache/000-default.conf /etc/apache2/sites-available/000-default.conf
RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf

# ─── Composer ─────────────────────────────────────────────────────
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer

WORKDIR /var/www/html

# ─── Install composer dependencies (cache layer) ──────────────────
COPY composer.json composer.lock ./
RUN composer install --no-interaction --no-scripts --no-autoloader --prefer-dist --no-progress

# ─── Install npm dependencies (cache layer, hanya jika ada package.json) ─
COPY package*.jso[n] ./
RUN if [ -f package.json ]; then \
        echo ">>> Installing npm dependencies..." && \
        npm install --no-audit --no-fund --silent; \
    else \
        echo ">>> No package.json — skip npm install"; \
    fi

# ─── Copy project ─────────────────────────────────────────────────
COPY . .

# ─── Finalize composer + npm build + cleanup ─────────────────────
RUN composer dump-autoload --optimize \
    && if [ -f package.json ] && grep -q '"build"' package.json; then \
           echo ">>> Running npm run build..." && npm run build; \
       fi \
    && rm -rf .git .github .gitlab-ci.yml tests \
    && find storage -type d -exec chmod 775 {} \; \
    && find bootstrap/cache -type d -exec chmod 775 {} \;

# ─── Permissions ──────────────────────────────────────────────────
RUN chown -R www-data:www-data /var/www/html/storage /var/www/html/bootstrap/cache

# ─── Entrypoint ───────────────────────────────────────────────────
COPY docker/entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod +x /usr/local/bin/entrypoint.sh

EXPOSE 80
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
CMD ["apache2-foreground"]
