# Use official PHP 8.2 CLI image as base
FROM php:8.2-cli

# Set working directory for the Laravel application
WORKDIR /app

# Install system dependencies required for Laravel extensions, Redis, and cron
RUN apt-get update && apt-get install -y \
    libzip-dev \
    libpng-dev \
    libjpeg-dev \
    libfreetype6-dev \
    libonig-dev \
    libxml2-dev \
    libcurl4-openssl-dev \
    unzip \
    curl \
    redis-server \
    cron \
    && apt-get clean

# Install PHP extensions needed for Laravel
RUN docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-install -j$(nproc) \
    zip \
    gd \
    mbstring \
    curl \
    xml \
    bcmath \
    pdo_mysql

# Install Imagick extension
RUN apt-get update && apt-get install -y \
    libmagickwand-dev \
    && pecl install imagick \
    && docker-php-ext-enable imagick \
    && apt-get clean

# Install Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# Install Redis extension for PHP
RUN pecl install redis && docker-php-ext-enable redis

# Set PHP configurations directly
RUN echo "upload_max_filesize=500M\n" \
    "post_max_size=500M\n" \
    "memory_limit=512M\n" \
    "max_execution_time=300\n" \
    "max_input_time=300\n" \
    > /usr/local/etc/php/conf.d/custom.ini

# Copy the Laravel project files into the container
COPY . /app/

# Install Laravel dependencies using Composer
RUN composer install --optimize-autoloader --no-dev --no-interaction

# Copy .env.example to .env and generate application key
COPY .env.test .env
RUN php artisan key:generate --ansi

# Copy start script
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh

# Configure cron job
RUN echo "* * * * * cd /app && /usr/local/bin/php artisan schedule:run >> /var/log/cron.log 2>&1" > /etc/cron.d/laravel-scheduler \
    && crontab /etc/cron.d/laravel-scheduler

# Expose ports: 8000 for Laravel web, 6379 for Redis
EXPOSE 8000 6379

# Start Redis, Laravel web, queue worker, and cron
CMD ["/entrypoint.sh"]
