#!/usr/bin/env bash
# ============================================================
# FSM CRM — CLI Installer
# Usage: bash install.sh
# Requires: PHP 8.2+, Composer, MySQL credentials
# ============================================================
set -e

DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PHP="${PHP_BIN:-php}"
COMPOSER="${COMPOSER_BIN:-composer}"

echo ""
echo "╔══════════════════════════════════════╗"
echo "║      FSM CRM — CLI Installer         ║"
echo "╚══════════════════════════════════════╝"
echo ""

# ── PHP version check ──────────────────────────────────────
PHP_VER=$("$PHP" -r "echo PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;")
if [[ $(echo "$PHP_VER >= 8.2" | bc -l) -ne 1 ]]; then
    echo "❌ PHP 8.2+ required. Found: $PHP_VER"
    exit 1
fi
echo "✅ PHP $PHP_VER"

# ── Collect credentials ─────────────────────────────────────
read -p "App URL (e.g. https://yourdomain.com): " APP_URL
read -p "DB Host [127.0.0.1]: " DB_HOST; DB_HOST="${DB_HOST:-127.0.0.1}"
read -p "DB Port [3306]: " DB_PORT; DB_PORT="${DB_PORT:-3306}"
read -p "DB Name: " DB_NAME
read -p "DB User: " DB_USER
read -sp "DB Password: " DB_PASS; echo ""
read -p "Mail SMTP Host: " MAIL_HOST
read -p "Mail SMTP Port [587]: " MAIL_PORT; MAIL_PORT="${MAIL_PORT:-587}"
read -p "Mail From Address: " MAIL_FROM
read -p "App Name [FSM CRM]: " APP_NAME; APP_NAME="${APP_NAME:-FSM CRM}"

# ── Copy .env ──────────────────────────────────────────────
cp "$DIR/.env.example" "$DIR/.env"

# Generate key
APP_KEY="base64:$(openssl rand -base64 32)"

# Write .env values using sed
sed -i.bak \
    -e "s|^APP_NAME=.*|APP_NAME=\"$APP_NAME\"|" \
    -e "s|^APP_KEY=.*|APP_KEY=$APP_KEY|" \
    -e "s|^APP_URL=.*|APP_URL=$APP_URL|" \
    -e "s|^APP_ENV=.*|APP_ENV=production|" \
    -e "s|^APP_DEBUG=.*|APP_DEBUG=false|" \
    -e "s|^DB_HOST=.*|DB_HOST=$DB_HOST|" \
    -e "s|^DB_PORT=.*|DB_PORT=$DB_PORT|" \
    -e "s|^DB_DATABASE=.*|DB_DATABASE=$DB_NAME|" \
    -e "s|^DB_USERNAME=.*|DB_USERNAME=$DB_USER|" \
    -e "s|^DB_PASSWORD=.*|DB_PASSWORD=$DB_PASS|" \
    -e "s|^MAIL_HOST=.*|MAIL_HOST=$MAIL_HOST|" \
    -e "s|^MAIL_PORT=.*|MAIL_PORT=$MAIL_PORT|" \
    -e "s|^MAIL_FROM_ADDRESS=.*|MAIL_FROM_ADDRESS=\"$MAIL_FROM\"|" \
    "$DIR/.env"

rm -f "$DIR/.env.bak"
echo "✅ .env written"

# ── Install composer dependencies ──────────────────────────
echo ""
echo "📦 Installing PHP dependencies..."
"$COMPOSER" install --no-dev --optimize-autoloader --no-interaction --working-dir="$DIR"
echo "✅ Composer done"

# ── Create storage directories ─────────────────────────────
mkdir -p \
    "$DIR/storage/app/public" \
    "$DIR/storage/framework/cache/data" \
    "$DIR/storage/framework/sessions" \
    "$DIR/storage/framework/views" \
    "$DIR/storage/logs"
echo "✅ Storage directories created"

# ── Run migrations (separate command) ─────────────────────
echo ""
echo "🗄️  Running migrations..."
"$PHP" "$DIR/artisan" migrate --force
echo "✅ Migrations complete"

# ── Run seeder (separate command) ─────────────────────────
echo ""
echo "🌱 Seeding database..."
"$PHP" "$DIR/artisan" db:seed --force
echo "✅ Seeding complete"

# ── Optimise ───────────────────────────────────────────────
"$PHP" "$DIR/artisan" config:cache
"$PHP" "$DIR/artisan" route:cache
"$PHP" "$DIR/artisan" view:cache
echo "✅ Application caches warmed"

# ── Write lock file ─────────────────────────────────────────
echo "$(date '+%Y-%m-%d %H:%M:%S') — installed via CLI" > "$DIR/.installer_complete"
echo ""
echo "╔══════════════════════════════════════════╗"
echo "║  ✅  Installation complete!              ║"
echo "╠══════════════════════════════════════════╣"
echo "║  1. Point document root → /public/      ║"
echo "║  2. Provision SSL via AutoSSL in cPanel  ║"
echo "║  3. Add queue cron (see README)          ║"
echo "║  4. Login: admin@example.com / password  ║"
echo "╚══════════════════════════════════════════╝"
