#!/bin/bash
# =============================================================================
# LeadPulse CRM — Automated Installer
# Usage: bash install.sh
# =============================================================================

set -e

RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
BOLD='\033[1m'
RESET='\033[0m'

print_step()  { echo -e "\n${BLUE}${BOLD}[STEP]${RESET} $1"; }
print_ok()    { echo -e "${GREEN}✔  $1${RESET}"; }
print_warn()  { echo -e "${YELLOW}⚠  $1${RESET}"; }
print_error() { echo -e "${RED}✖  $1${RESET}"; exit 1; }

echo -e "${CYAN}"
cat << 'EOF'
  _               _ ____        _
 | |    ___  __ _| |  _ \ _   _| |___  ___
 | |   / _ \/ _` | | |_) | | | | / __|/ _ \
 | |__|  __/ (_| | |  __/| |_| | \__ \  __/
 |_____\___|\__,_|_|_|    \__,_|_|___/\___|
  CRM — Automated Installer
EOF
echo -e "${RESET}"

# ─── Check Requirements ────────────────────────────────────────────────────────
print_step "Checking system requirements..."

command -v php  >/dev/null 2>&1 || print_error "PHP is not installed. Please install PHP 8.1+"
command -v composer >/dev/null 2>&1 || print_error "Composer is not installed. Please install Composer 2.x"
command -v mysql >/dev/null 2>&1 || print_warn "MySQL CLI not found — you may need to create the DB manually"

PHP_VERSION=$(php -r "echo PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;")
print_ok "PHP $PHP_VERSION detected"
print_ok "Composer detected"

# ─── .env Setup ───────────────────────────────────────────────────────────────
print_step "Setting up environment file..."

if [ ! -f .env ]; then
    cp .env.example .env
    print_ok "Created .env from .env.example"
else
    print_warn ".env already exists — skipping copy"
fi

# Prompt for DB credentials
echo ""
echo -e "${BOLD}Database Configuration${RESET}"
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     [leadpulse_crm]: " DB_NAME; DB_NAME=${DB_NAME:-leadpulse_crm}
read -p "  DB Username [root]:      " DB_USER;    DB_USER=${DB_USER:-root}
read -s -p "  DB Password []:        " DB_PASS;   echo ""

# Update .env
sed -i "s/^DB_HOST=.*/DB_HOST=${DB_HOST}/" .env
sed -i "s/^DB_PORT=.*/DB_PORT=${DB_PORT}/" .env
sed -i "s/^DB_DATABASE=.*/DB_DATABASE=${DB_NAME}/" .env
sed -i "s/^DB_USERNAME=.*/DB_USERNAME=${DB_USER}/" .env
sed -i "s/^DB_PASSWORD=.*/DB_PASSWORD=${DB_PASS}/" .env

print_ok "Database credentials saved to .env"

# ─── Create Database ───────────────────────────────────────────────────────────
print_step "Creating database..."
if command -v mysql >/dev/null 2>&1; then
    mysql -h"$DB_HOST" -P"$DB_PORT" -u"$DB_USER" -p"$DB_PASS" \
        -e "CREATE DATABASE IF NOT EXISTS \`${DB_NAME}\` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" 2>/dev/null \
        && print_ok "Database '${DB_NAME}' ready" \
        || print_warn "Could not auto-create database — please create it manually"
else
    print_warn "MySQL CLI not available — create database manually:"
    echo "  CREATE DATABASE ${DB_NAME} CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
fi

# ─── Install Dependencies ──────────────────────────────────────────────────────
print_step "Installing PHP dependencies (composer install)..."
composer install --optimize-autoloader --no-interaction --quiet
print_ok "Dependencies installed"

# ─── Generate App Key ─────────────────────────────────────────────────────────
print_step "Generating application key..."
php artisan key:generate --force
print_ok "Application key generated"

# ─── Run Migrations ───────────────────────────────────────────────────────────
print_step "Running database migrations..."
php artisan migrate --force
print_ok "Migrations complete"

# ─── Seed Database ────────────────────────────────────────────────────────────
print_step "Seeding demo data..."
php artisan db:seed --force
print_ok "Database seeded with demo users and leads"

# ─── Storage Link ─────────────────────────────────────────────────────────────
print_step "Creating storage symlink..."
php artisan storage:link --force 2>/dev/null || true
print_ok "Storage symlink created"

# ─── Set Permissions ──────────────────────────────────────────────────────────
print_step "Setting file permissions..."
chmod -R 775 storage bootstrap/cache 2>/dev/null || true
print_ok "Permissions set"

# ─── Cache Config ─────────────────────────────────────────────────────────────
print_step "Caching configuration..."
php artisan config:cache   2>/dev/null || true
php artisan route:cache    2>/dev/null || true
php artisan view:cache     2>/dev/null || true
print_ok "Caches warmed"

# ─── Done ─────────────────────────────────────────────────────────────────────
echo ""
echo -e "${GREEN}${BOLD}════════════════════════════════════════${RESET}"
echo -e "${GREEN}${BOLD}  LeadPulse CRM installed successfully!${RESET}"
echo -e "${GREEN}${BOLD}════════════════════════════════════════${RESET}"
echo ""
echo -e "${BOLD}Demo Credentials:${RESET}"
echo -e "  Super Admin  │ admin@leadpulse.com    │ Admin@1234"
echo -e "  Manager      │ manager@leadpulse.com  │ Manager@1234"
echo -e "  Sales Rep    │ rep1@leadpulse.com     │ Rep@1234"
echo ""
echo -e "${BOLD}Start development server:${RESET}"
echo -e "  php artisan serve"
echo ""
echo -e "${BOLD}API Base URL:${RESET}"
echo -e "  http://localhost:8000/api/v1"
echo ""
echo -e "${BOLD}REST API Quick Start:${RESET}"
echo -e '  curl -X POST http://localhost:8000/api/v1/auth/login \'
echo -e '    -H "Content-Type: application/json" \'
echo -e '    -d '"'"'{"email":"admin@leadpulse.com","password":"Admin@1234"}'"'"
echo ""
