#!/bin/sh
set -e

echo "Starting MLBB Counter application container..."

# Check if .env exists
if [ ! -f /var/www/html/.env ]; then
    echo "Creating .env from .env.example..."
    cp /var/www/html/.env.example /var/www/html/.env
fi

# Check if vendor directory exists
if [ ! -d /var/www/html/vendor ]; then
    echo "Vendor directory missing. Running composer install..."
    composer install --no-interaction --prefer-dist --optimize-autoloader
fi

# Ensure application key is set
if ! grep -q "APP_KEY=base64:" /var/www/html/.env; then
    echo "Generating application key..."
    php artisan key:generate --force
fi

# Expose storage/app/public (admin image uploads) at public/storage
if [ ! -e /var/www/html/public/storage ]; then
    php artisan storage:link || true
fi

# Ensure storage directories exist with proper permissions
mkdir -p /var/www/html/storage/framework/cache/data \
         /var/www/html/storage/framework/sessions \
         /var/www/html/storage/framework/views \
         /var/www/html/storage/logs \
         /var/www/html/bootstrap/cache

chown -R www-data:www-data /var/www/html/storage /var/www/html/bootstrap/cache
chmod -R 775 /var/www/html/storage /var/www/html/bootstrap/cache

# Wait for MySQL to be ready if DB_HOST is set
if [ -n "$DB_HOST" ]; then
    echo "Waiting for MySQL at $DB_HOST:${DB_PORT:-3306}..."
    max_tries=30
    count=0
    until php -r "
        try {
            new PDO('mysql:host=' . getenv('DB_HOST') . ';port=' . (getenv('DB_PORT') ?: 3306) . ';dbname=' . getenv('DB_DATABASE'), getenv('DB_USERNAME'), getenv('DB_PASSWORD'));
            exit(0);
        } catch (Exception \$e) {
            exit(1);
        }
    "; do
        count=$((count+1))
        if [ $count -gt $max_tries ]; then
            echo "Warning: MySQL connection timed out. Proceeding anyway..."
            break
        fi
        sleep 2
    done
    echo "MySQL connection established!"

    echo "Running migrations..."
    php artisan migrate --force || true
fi

echo "Application ready. Executing command: $@"
exec "$@"
