#!/bin/bash

###############################################################################
# Scripts Directory Cleanup
#
# This script safely removes obsolete scripts while preserving essential ones.
# It creates a backup first and provides a rollback mechanism.
#
# Usage: ./scripts/execute-cleanup.sh [--dry-run] [--force]
#
# Options:
#   --dry-run    Show what would be deleted without actually deleting
#   --force      Skip confirmation prompt
###############################################################################

set -e

# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# Configuration
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
BACKUP_FILE="$PROJECT_ROOT/scripts-backup-$(date +%Y%m%d-%H%M%S).tar.gz"
DRY_RUN=false
FORCE=false

# Parse arguments
for arg in "$@"; do
    case $arg in
        --dry-run)
            DRY_RUN=true
            shift
            ;;
        --force)
            FORCE=true
            shift
            ;;
        *)
            echo -e "${RED}Unknown option: $arg${NC}"
            exit 1
            ;;
    esac
done

###############################################################################
# Helper Functions
###############################################################################

log_info() {
    echo -e "${BLUE}ℹ${NC} $1"
}

log_success() {
    echo -e "${GREEN}✓${NC} $1"
}

log_warning() {
    echo -e "${YELLOW}⚠${NC} $1"
}

log_error() {
    echo -e "${RED}✗${NC} $1"
}

confirm() {
    if [ "$FORCE" = true ]; then
        return 0
    fi

    local prompt="$1"
    read -p "$prompt [y/N] " -n 1 -r
    echo
    [[ $REPLY =~ ^[Yy]$ ]]
}

safe_remove() {
    local file="$1"

    if [ ! -e "$SCRIPT_DIR/$file" ]; then
        log_warning "File not found (already removed?): $file"
        return
    fi

    if [ "$DRY_RUN" = true ]; then
        echo "  Would remove: $file"
    else
        rm -f "$SCRIPT_DIR/$file"
        log_success "Removed: $file"
    fi
}

safe_remove_dir() {
    local dir="$1"

    if [ ! -d "$SCRIPT_DIR/$dir" ]; then
        log_warning "Directory not found (already removed?): $dir"
        return
    fi

    if [ "$DRY_RUN" = true ]; then
        echo "  Would remove directory: $dir"
    else
        rm -rf "$SCRIPT_DIR/$dir"
        log_success "Removed directory: $dir"
    fi
}

###############################################################################
# Main Script
###############################################################################

echo "╔════════════════════════════════════════════════════════════════╗"
echo "║        Scripts Directory Cleanup - Safety First               ║"
echo "╚════════════════════════════════════════════════════════════════╝"
echo

# Show dry-run status
if [ "$DRY_RUN" = true ]; then
    log_warning "DRY RUN MODE - No files will be deleted"
    echo
fi

# Step 1: Create backup
if [ "$DRY_RUN" = false ]; then
    log_info "Creating backup of scripts/ directory..."
    cd "$PROJECT_ROOT"
    tar -czf "$BACKUP_FILE" scripts/ 2>/dev/null || {
        log_error "Backup failed!"
        exit 1
    }
    log_success "Backup created: $BACKUP_FILE"
    log_info "Backup size: $(du -h "$BACKUP_FILE" | cut -f1)"
    echo
else
    log_info "Would create backup: $BACKUP_FILE"
    echo
fi

# Step 2: Show summary
log_info "Cleanup Summary:"
echo "  • Old MySQL scripts: 6 files"
echo "  • One-off data scripts: 7 files"
echo "  • Audit scripts: 8 files"
echo "  • Load test scripts: 7 files"
echo "  • Email test scripts: 7 files (keeping test-email-system.sh)"
echo "  • API test scripts: 6 files"
echo "  • CI/E2E scripts: 5 files"
echo "  • JS test files: 6 files"
echo "  • Verification scripts: 4 files"
echo "  • Directories: 3 folders"
echo "  ────────────────────"
echo "  Total to remove: ~60 files"
echo

# Step 3: Confirm
if [ "$DRY_RUN" = false ]; then
    if ! confirm "Proceed with cleanup?"; then
        log_warning "Cleanup cancelled"
        log_info "To restore if needed: tar -xzf $BACKUP_FILE"
        exit 0
    fi
    echo
fi

# Step 4: Remove files by category

log_info "Removing old MySQL scripts..."
safe_remove "backup-db-mysql.sh"
safe_remove "compare-db-mysql.sh"
safe_remove "compare-db-mysql.sh.bak"
safe_remove "restore-db-mysql.sh"
safe_remove "restore-db-mysql.sh.bak"
echo

log_info "Removing one-off data scripts..."
safe_remove "seed-mohamed-abdo-event.sh"
safe_remove "seed-test-chargeback.sh"
safe_remove "setup-test-data.php"
safe_remove "generate-test-tickets.php"
safe_remove "generate-test-metrics.php"
safe_remove "simulate-ticket-metrics.php"
safe_remove "fix-seat-rotations.php"
echo

log_info "Removing audit scripts..."
safe_remove "frontend-a11y-audit.sh"
safe_remove "frontend-performance-audit.sh"
safe_remove "frontend-security-audit.sh"
safe_remove "security-audit-advanced.sh"
safe_remove "security-audit-booking.sh"
safe_remove "security-audit.sh"
safe_remove "security-pentest.sh"
safe_remove "security-test-all.sh"
echo

log_info "Removing load test scripts..."
safe_remove "concurrent-booking-stress.sh"
safe_remove "run-load-tests.sh"
safe_remove "run-payment-tests.sh"
safe_remove "test-db-durability.sh"
safe_remove "test-rate-limiting.sh"
safe_remove "test-time-drift.sh"
safe_remove "performance-gate-check.sh"
echo

log_info "Removing email test scripts (keeping test-email-system.sh)..."
safe_remove "check-email-deliverability.sh"
safe_remove "test-email-deliverability.sh"
safe_remove "test-email-triggers-live.sh"
safe_remove "test-email-triggers.sh"
safe_remove "test-newsletter-template.sh"
safe_remove "test-newsletter-templates.sh"
safe_remove "test-password-reset-flow.sh"
echo

log_info "Removing API test scripts..."
safe_remove "run-api-tests.sh"
safe_remove "test-admin-api.sh"
safe_remove "test-customer-api.sh"
safe_remove "test-critical-endpoints.sh"
safe_remove "test-phase1-live.sh"
safe_remove "test-phase1-simple.sh"
echo

log_info "Removing CI/E2E scripts..."
safe_remove "ci-cache-smoke-test.sh"
safe_remove "ci-check-production-routes.sh"
safe_remove "setup-e2e-comprehensive.sh"
safe_remove "setup-e2e.sh"
safe_remove "start-e2e-server.sh"
echo

log_info "Removing JavaScript test files..."
safe_remove "assert-mix-matrix.js"
safe_remove "assert-no-wp5-keys.js"
safe_remove "size-budget.js"
safe_remove "test-improved-seat-management.js"
safe_remove "test-new-endpoints-simple.js"
safe_remove "validate-holdseats-flow.js"
echo

log_info "Removing one-off verification scripts..."
safe_remove "verify-capacity-fix.sh"
safe_remove "verify-mysql57-compatibility.sh"
safe_remove "test-real-chargeback.sh"
safe_remove "test-queue-worker-monitor.sh"
echo

log_info "Removing directories..."
safe_remove_dir "archive"
safe_remove_dir "MBS_discovery"
safe_remove_dir "working"
echo

# Step 5: Summary
echo "╔════════════════════════════════════════════════════════════════╗"
echo "║                    Cleanup Complete                             ║"
echo "╚════════════════════════════════════════════════════════════════╝"
echo

if [ "$DRY_RUN" = false ]; then
    log_success "Cleanup completed successfully!"
    echo
    log_info "Next steps:"
    echo "  1. Test scripts: ./scripts/test-health-check.sh"
    echo "  2. Review changes: ls -la scripts/"
    echo "  3. Commit: git add scripts/ && git commit -m 'chore: cleanup scripts directory'"
    echo
    log_info "Rollback if needed:"
    echo "  cd $PROJECT_ROOT"
    echo "  rm -rf scripts/"
    echo "  tar -xzf $BACKUP_FILE"
    echo
    log_warning "Backup location: $BACKUP_FILE"
    log_info "Keep this backup until changes are verified on server"
else
    log_info "Dry run completed - no files were deleted"
    echo
    log_info "To execute for real:"
    echo "  ./scripts/execute-cleanup.sh"
    echo
    log_info "To execute without confirmation:"
    echo "  ./scripts/execute-cleanup.sh --force"
fi

echo
