#!/bin/bash

# Simplified Workspace CLI - Unified Command Interface
# Provides a single entry point for all workspace operations
# Usage: ./workspace-simplified [command] [subcommand] [options]

set -e

# Configuration
VERSION="2.0.0"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
WORKSPACE_ROOT="$SCRIPT_DIR"
cd "$WORKSPACE_ROOT"

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

# Paths
SCRIPTS_DIR="$WORKSPACE_ROOT/scripts"
DOCS_DIR="$WORKSPACE_ROOT/docs/workspace"
PROJECTS_DIR="$WORKSPACE_ROOT/morphism-ship/lab"
TEMPLATES_DIR="$WORKSPACE_ROOT/templates"
API_HOST="localhost"
API_PORT="3000"
API_PID_FILE=".api/api.pid"
MONITOR_PID_FILE=".monitor/monitor.pid"

# Helper functions
print_header() {
    echo -e "${BLUE}🚀 Morphism Workspace CLI v$VERSION${NC}"
    echo -e "${BLUE}$(printf '=%.0s' {1..50})${NC}"
}

print_success() {
    echo -e "${GREEN}✅ $1${NC}"
}

print_error() {
    echo -e "${RED}❌ $1${NC}"
}

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

print_info() {
    echo -e "${CYAN}ℹ️  $1${NC}"
}

# Check if a script exists and is executable
check_script() {
    local script_path="$1"
    if [ ! -f "$script_path" ]; then
        print_error "Script not found: $script_path"
        return 1
    fi
    if [ ! -x "$script_path" ]; then
        print_warning "Script not executable: $script_path"
        chmod +x "$script_path"
    fi
    return 0
}

# Run a script with error handling
run_script() {
    local script_path="$1"
    shift
    if check_script "$script_path"; then
        bash "$script_path" "$@"
        return $?
    else
        return 1
    fi
}

# Project management functions
project_list() {
    print_header
    print_info "Project List"
    echo ""

    if [ -f "$SCRIPTS_DIR/workspace-dashboard.sh" ]; then
        run_script "$SCRIPTS_DIR/workspace-dashboard.sh" | grep -A 20 "Repository Collections"
    else
        print_error "Dashboard script not found"
        return 1
    fi
}

project_create() {
    local PROJECT_NAME=${1:-""}
    local TEMPLATE=${2:-"saas-template"}

    if [ -z "$PROJECT_NAME" ]; then
        print_error "Please provide a project name"
        echo "Usage: workspace project create <project-name> [template]"
        return 1
    fi

    print_header
    print_info "Creating New Project"
    echo ""
    echo "Project: $PROJECT_NAME"
    echo "Template: $TEMPLATE"
    echo ""

    if [ -f "$SCRIPTS_DIR/setup-from-template.sh" ]; then
        run_script "$SCRIPTS_DIR/setup-from-template.sh" "$PROJECT_NAME" "$TEMPLATE"
        print_success "Project '$PROJECT_NAME' created successfully!"
        echo ""
        print_warning "Next steps:"
        echo "  cd morphism-ship/lab/$PROJECT_NAME"
        echo "  npm install"
        echo "  npm run dev"
    else
        print_error "Workspace scripts not found"
        return 1
    fi
}

project_validate() {
    local PROJECT="$1"
    if [ -z "$PROJECT" ]; then
        print_error "Please provide a project name"
        echo "Usage: workspace project validate <project-name>"
        return 1
    fi

    print_header
    print_info "Validating Project: $PROJECT"
    echo ""

    if [ -f "$SCRIPTS_DIR/validate-prompt-compliance.sh" ]; then
        run_script "$SCRIPTS_DIR/validate-prompt-compliance.sh" "$PROJECTS_DIR/$PROJECT"
    else
        print_error "Validation script not found"
        return 1
    fi
}

project_status() {
    local PROJECT="$1"
    if [ -z "$PROJECT" ]; then
        print_error "Please provide a project name"
        echo "Usage: workspace project status <project-name>"
        return 1
    fi

    print_header
    print_info "Project Status: $PROJECT"
    echo ""

    if [ -f "$SCRIPTS_DIR/project-status.sh" ]; then
        run_script "$SCRIPTS_DIR/project-status.sh" "$PROJECTS_DIR/$PROJECT"
    else
        print_error "Status script not found"
        return 1
    fi
}

# Validation functions
validate_all() {
    print_header
    print_info "Validating All Projects"
    echo ""

    if [ -f "$SCRIPTS_DIR/validate-all-projects.sh" ]; then
        run_script "$SCRIPTS_DIR/validate-all-projects.sh"
    else
        print_error "Validation script not found"
        return 1
    fi
}

validate_workspace() {
    print_header
    print_info "Workspace Health Check"
    echo ""
    echo "Checking workspace structure..."

    # Check core directories
    [ -d "$SCRIPTS_DIR" ] && print_success "Scripts directory exists" || print_error "Scripts directory missing"
    [ -d "$TEMPLATES_DIR" ] && print_success "Templates directory exists" || print_warning "Templates directory missing"
    [ -d "$PROJECTS_DIR" ] && print_success "Projects directory exists" || print_error "Projects directory missing"

    echo ""
    echo "Checking core files..."
    [ -f "$WORKSPACE_ROOT/README.md" ] && print_success "README.md exists" || print_error "README.md missing"
    [ -f "$DOCS_DIR/MORPHISM_ECOSYSTEM_ARCHITECTURE.md" ] && print_success "Architecture docs exist" || print_warning "Architecture docs missing"

    echo ""
    echo "Checking scripts..."
    local SCRIPT_COUNT=$(find "$SCRIPTS_DIR" -name "*.sh" -type f 2>/dev/null | wc -l)
    echo -e "${CYAN}Found $SCRIPT_COUNT automation scripts${NC}"
}

# API functions
api_start() {
    print_header
    print_info "Starting API Server"
    echo ""

    if [ -f "$SCRIPTS_DIR/workspace-api.sh" ]; then
        run_script "$SCRIPTS_DIR/workspace-api.sh" start
        if [ $? -eq 0 ]; then
            print_success "API server started!"
            echo ""
            echo -e "${YELLOW}Web Dashboard: http://$API_HOST:$API_PORT${NC}"
            echo -e "${YELLOW}API Endpoints: http://$API_HOST:$API_PORT/api${NC}"
        fi
    else
        print_error "API script not found"
        return 1
    fi
}

api_stop() {
    print_header
    print_info "Stopping API Server"
    echo ""

    if [ -f "$SCRIPTS_DIR/workspace-api.sh" ]; then
        run_script "$SCRIPTS_DIR/workspace-api.sh" stop
    else
        print_error "API script not found"
        return 1
    fi
}

api_status() {
    print_header
    print_info "API Server Status"
    echo ""

    if [ -f "$SCRIPTS_DIR/workspace-api.sh" ]; then
        run_script "$SCRIPTS_DIR/workspace-api.sh" status
    else
        print_error "API script not found"
        return 1
    fi
}

# Main command dispatcher
case ${1:-"help"} in
    "help"|"-h"|"--help")
        print_header
        echo ""
        echo "Unified command interface for the Morphism Workspace"
        echo ""
        echo -e "${YELLOW}Core Commands:${NC}"
        echo "  project     - Project management operations"
        echo "  validate    - Quality assurance operations"
        echo "  api         - API server management"
        echo ""
        echo -e "${YELLOW}Quick Actions:${NC}"
        echo "  new <name>     - Create a new project"
        echo "  status         - Show workspace status"
        echo "  dashboard      - Open web dashboard"
        echo "  docs           - Open documentation"
        echo ""
        echo -e "${YELLOW}Examples:${NC}"
        echo "  workspace new my-app"
        echo "  workspace project list"
        echo "  workspace validate all"
        echo ""
        echo "Use 'workspace <command> --help' for more information"
        ;;
        
    "new")
        PROJECT_NAME=${2:-""}
        TEMPLATE=${3:-"saas-template"}
        
        if [ -z "$PROJECT_NAME" ]; then
            print_error "Please provide a project name"
            echo "Usage: workspace new <project-name> [template]"
            exit 1
        fi
        
        print_header
        print_info "Creating New Project"
        echo ""
        echo "Project: $PROJECT_NAME"
        echo "Template: $TEMPLATE"
        echo ""
        
        if [ -f "scripts/setup-from-template.sh" ]; then
            bash scripts/setup-from-template.sh "$PROJECT_NAME" "$TEMPLATE"
            print_success "Project '$PROJECT_NAME' created successfully!"
            echo ""
            print_warning "Next steps:"
            echo "  cd morphism-ship/lab/$PROJECT_NAME"
            echo "  npm install"
            echo "  npm run dev"
        else
            print_error "Setup script not found"
            exit 1
        fi
        ;;
        
    "project")
        shift
        case ${1:-"list"} in
            list)    project_list ;;
            create)  shift; project_create "$@" ;;
            validate) shift; project_validate "$@" ;;
            status)  shift; project_status "$@" ;;
            *)
                echo "Project Management"
                echo "=================="
                echo ""
                echo "Subcommands:"
                echo "  list                    - List all projects"
                echo "  create <name> [template] - Create new project"
                echo "  validate <name>         - Validate project"
                echo "  status <name>           - Check project status"
                ;;
        esac
        ;;
        
    "validate")
        shift
        case ${1:-"all"} in
            "all")
                validate_all "$@"
                ;;
            "workspace")
                validate_workspace "$@"
                ;;
            *)
                echo "Validation Operations"
                echo "===================="
                echo ""
                echo "Subcommands:"
                echo "  all        - Validate all projects"
                echo "  workspace  - Validate workspace structure"
                ;;
        esac
        ;;
        
    "api")
        shift
        case ${1:-"start"} in
            "start")
                api_start "$@"
                ;;
            "stop")
                api_stop "$@"
                ;;
            "status")
                api_status "$@"
                ;;
            *)
                echo "API Server Management"
                echo "====================="
                echo ""
                echo "Subcommands:"
                echo "  start   - Start API server and web dashboard"
                echo "  stop    - Stop API server"
                echo "  status  - Check API server status"
                ;;
        esac
        ;;
        
    "dashboard")
        print_header
        print_info "Launching Web Dashboard"
        echo ""
        
        # Start API if not running
        if [ ! -f "$API_PID_FILE" ] || ! ps -p $(cat "$API_PID_FILE") > /dev/null 2>&1; then
            echo "Starting API server..."
            api_start
        fi

        # Try to open browser
        if command -v xdg-open > /dev/null; then
            xdg-open "http://$API_HOST:$API_PORT"
        elif command -v open > /dev/null; then
            open "http://$API_HOST:$API_PORT"
        else
            echo -e "${YELLOW}Please open manually: http://$API_HOST:$API_PORT${NC}"
        fi
        ;;
        
    "docs")
        print_header
        print_info "Documentation"
        echo ""
        echo "📚 Available Documentation:"
        echo ""
        
        echo "Core Documents:"
        [ -f "README.md" ] && echo "  • README.md - Main documentation"
        [ -f "$DOCS_DIR/MORPHISM_ECOSYSTEM_ARCHITECTURE.md" ] && echo "  • docs/workspace/MORPHISM_ECOSYSTEM_ARCHITECTURE.md - Architecture guide"
        [ -f "$DOCS_DIR/EARLY_STAGE_DEV_AGENT_PROMPT.md" ] && echo "  • docs/workspace/EARLY_STAGE_DEV_AGENT_PROMPT.md - AI guidelines"
        [ -f "$DOCS_DIR/WORKSPACE_ECOSYSTEM_OVERVIEW.md" ] && echo "  • docs/workspace/WORKSPACE_ECOSYSTEM_OVERVIEW.md - Complete overview"
        
        echo ""
        echo "Guides & References:"
        [ -f "$DOCS_DIR/TEMPLATE_SYSTEM_GUIDE.md" ] && echo "  • docs/workspace/TEMPLATE_SYSTEM_GUIDE.md - Template system"
        [ -f "$DOCS_DIR/AUTOMATION_INDEX.md" ] && echo "  • docs/workspace/AUTOMATION_INDEX.md - Automation tools"
        [ -f "$DOCS_DIR/TECHNOLOGY_DECISION_MATRIX.md" ] && echo "  • docs/workspace/TECHNOLOGY_DECISION_MATRIX.md - Tech decisions"
        
        echo ""
        echo -e "${YELLOW}Web Dashboard:${NC} http://$API_HOST:$API_PORT (run 'workspace api start')"
        ;;
        
    "version"|"-v"|"--version")
        echo "Morphism Workspace CLI v$VERSION"
        echo "Built with ❤️ for developers"
        ;;
        
    *)
        print_error "Unknown command: $1"
        echo ""
        echo "Use 'workspace --help' for available commands"
        echo ""
        echo "Quick start:"
        echo "  workspace new my-app     # Create a new project"
        echo "  workspace status         # Check workspace status"
        echo "  workspace dashboard      # Open web dashboard"
        ;;
esac
