#!/usr/bin/env bash
# LocalPulse Installer for macOS / Linux
# Usage: curl -fsSL https://your-domain/install.sh | bash
#    or: ./install.sh

set -euo pipefail

RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'

log_info()  { echo -e "${GREEN}[INFO]${NC} $1"; }
log_warn()  { echo -e "${YELLOW}[WARN]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }

APP_NAME="LOCAL PULSE"
APP_DIR="${LOCALPULSE_DIR:-$(pwd)}"
DB_NAME="${DB_NAME:-localpulse}"
DB_USER="${DB_USER:-root}"
DB_PASS="${DB_PASSWORD:-}"
NEWSAPI_KEY="${NEWSAPI_KEY:-5a3b323466de4f11a971e0546b434089}"

echo "============================================"
echo "  $APP_NAME Installer"
echo "============================================"
echo ""

# Detect OS
OS="$(uname -s)"
case "$OS" in
    Darwin) OS_NAME="macOS" ;;
    Linux)  OS_NAME="Linux" ;;
    *) log_error "Unsupported OS: $OS"; exit 1 ;;
esac
log_info "Detected OS: $OS_NAME"

# Check for PHP
if ! command -v php &>/dev/null; then
    log_error "PHP is not installed. Please install PHP 8.2+ first."
    exit 1
fi
PHP_VERSION=$(php -v | head -1 | cut -d' ' -f2 | cut -d'.' -f1,2)
log_info "PHP version: $(php -v | head -1)"

# Check for Composer
if ! command -v composer &>/dev/null; then
    log_warn "Composer not found. Installing..."
    curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer 2>/dev/null || {
        curl -sS https://getcomposer.org/installer | php
        mv composer.phar /usr/local/bin/composer 2>/dev/null || sudo mv composer.phar /usr/local/bin/composer 2>/dev/null || true
    }
fi
log_info "Composer: $(composer --version 2>/dev/null || echo 'installed')"

# Check for MySQL/MariaDB
if ! command -v mysql &>/dev/null && ! command -v mariadb &>/dev/null; then
    log_warn "MySQL/MariaDB client not found. Make sure your server is running."
else
    log_info "MySQL client found"
fi

# Navigate to app directory
cd "$APP_DIR"

# Install dependencies
log_info "Installing PHP dependencies..."
composer install --no-interaction --prefer-dist --optimize-autoloader

# Setup environment file
if [ ! -f .env ]; then
    log_info "Creating .env file..."
    cp .env.example .env 2>/dev/null || cat > .env <<EOF
APP_NAME="LOCAL PULSE"
APP_ENV=local
APP_DEBUG=true
APP_KEY=base64:$(php -r 'echo base64_encode(random_bytes(32));')
APP_TIMEZONE=UTC
APP_URL=http://localhost

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=${DB_NAME}
DB_USERNAME=${DB_USER}
DB_PASSWORD=${DB_PASS}

SESSION_DRIVER=file
CACHE_STORE=file
QUEUE_CONNECTION=sync

NEWSAPI_KEY=${NEWSAPI_KEY}
NEWSAPI_BASE_URL=https://newsapi.org/v2
NEWSAPI_AU_SOURCES=abc-news-au,news-com-au,australian-financial-review,google-news-au,bbc-news,reuters,cnn,al-jazeera-english,associated-press
NEWSAPI_COUNTRY=au
EOF
    log_info ".env created"
else
    log_info ".env already exists, skipping"
fi

# Generate application key
php artisan key:generate --force

# Run migrations
log_info "Running database migrations..."
php artisan migrate --force

# Seed database
log_info "Seeding database..."
php artisan db:seed --force

# Create storage link
php artisan storage:link 2>/dev/null || true

# Set permissions
chmod -R 775 storage bootstrap/cache 2>/dev/null || true

# Clear cache
php artisan optimize --force 2>/dev/null || true

echo ""
echo "============================================"
echo "  Installation Complete!"
echo "============================================"
echo ""
log_info "Visit: http://localhost"
log_info "Admin: http://localhost/admin"
echo ""
log_info "Default admin credentials:"
echo "  Email:    admin@localpulse.com"
echo "  Password: warriors132"
echo ""
log_info "NewsAPI Key: ${NEWSAPI_KEY}"
echo ""