#!/bin/bash

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

set -e

# Resolve workspace root reliably (even if invoked from another directory)
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
WORKSPACE_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"

# Source shared helpers from workspace root
source "$WORKSPACE_ROOT/lib/workspace.sh"
source "$WORKSPACE_ROOT/commands.sh"

cd "$WORKSPACE_ROOT"

# 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 "  template    - Template system operations"
        echo "  validate    - Quality assurance operations"
        echo "  monitor     - Monitoring and analytics"
        echo "  backup      - Backup and restore operations"
        echo "  collab      - Collaboration features"
        echo "  portfolio   - Workspace ↔ portfolio sync"
        echo "  api         - API server management"
        echo "  workspace   - Workspace-level operations"
        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 "  workspace monitor start"
        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
        echo -e "${CYAN}Creating New Project${NC}"
        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 ""
            echo -e "${YELLOW}Next steps:${NC}"
            echo "  cd morphism-ship/lab/$PROJECT_NAME"
            echo "  npm install"
            echo "  npm run dev"
        else
            print_error "Workspace scripts not found"
        fi
        ;;
        
    "project")
        workspace_command "project" "${@:2}"
        ;;
        
    "template")
        case ${2:-"list"} in
            "list")
                print_header
                echo -e "${CYAN}Available Templates${NC}"
                echo ""
                
                if [ -f "scripts/template-manager.sh" ]; then
                    bash scripts/template-manager.sh list
                else
                    print_error "Template manager not found"
                fi
                ;;
                
            "create")
                NAME=${3:-""}
                TYPE=${4:-"web"}
                AUTH=${5:-"true"}
                DB=${6:-"true"}
                DEPLOY=${7:-"true"}
                
                if [ -z "$NAME" ]; then
                    print_error "Please provide template name"
                    echo "Usage: workspace template create <name> [type] [auth] [db] [deploy]"
                    exit 1
                fi
                
                print_header
                echo -e "${CYAN}Creating Template: $NAME${NC}"
                echo ""
                
                if [ -f "scripts/generate-template.sh" ]; then
                    bash scripts/generate-template.sh "$NAME" "$TYPE" "$AUTH" "$DB" "$DEPLOY"
                else
                    print_error "Template generator not found"
                fi
                ;;
                
            "show")
                NAME=${3:-""}
                
                if [ -z "$NAME" ]; then
                    print_error "Please provide template name"
                    echo "Usage: workspace template show <name>"
                    exit 1
                fi
                
                if [ -f "scripts/template-manager.sh" ]; then
                    bash scripts/template-manager.sh show "$NAME"
                else
                    print_error "Template manager not found"
                fi
                ;;
                
            *)
                echo "Template Management"
                echo "==================="
                echo ""
                echo "Subcommands:"
                echo "  list                    - List available templates"
                echo "  create <name> [options] - Create new template"
                echo "  show <name>             - Show template details"
                ;;
        esac
        ;;
        
    "validate")
        workspace_command "validate" "${@:2}"
        ;;
        
    "monitor")
        case ${2:-"status"} in
            "start")
                print_header
                echo -e "${CYAN}Starting Workspace Monitor${NC}"
                echo ""
                
                if [ -f "scripts/workspace-monitor.sh" ]; then
                    bash scripts/workspace-monitor.sh start
                else
                    print_error "Monitor script not found"
                fi
                ;;
                
            "stop")
                print_header
                echo -e "${CYAN}Stopping Workspace Monitor${NC}"
                echo ""
                
                if [ -f "scripts/workspace-monitor.sh" ]; then
                    bash scripts/workspace-monitor.sh stop
                else
                    print_error "Monitor script not found"
                fi
                ;;
                
            "status")
                print_header
                echo -e "${CYAN}Monitor Status${NC}"
                echo ""
                
                if [ -f "scripts/workspace-monitor.sh" ]; then
                    bash scripts/workspace-monitor.sh status
                else
                    print_error "Monitor script not found"
                fi
                ;;
                
            "report")
                print_header
                echo -e "${CYAN}Monitor Report${NC}"
                echo ""
                
                if [ -f "scripts/workspace-monitor.sh" ]; then
                    bash scripts/workspace-monitor.sh report
                else
                    print_error "Monitor script not found"
                fi
                ;;
                
            *)
                echo "Monitoring Operations"
                echo "===================="
                echo ""
                echo "Subcommands:"
                echo "  start   - Start monitoring daemon"
                echo "  stop    - Stop monitoring daemon"
                echo "  status  - Check monitor status"
                echo "  report  - Generate monitor report"
                ;;
        esac
        ;;
        
    "backup")
        case ${2:-"create"} in
            "create")
                TYPE=${3:-"full"}
                NAME=${4:-"workspace-$(date +%Y%m%d_%H%M%S)"}
                
                print_header
                echo -e "${CYAN}Creating Backup${NC}"
                echo "Type: $TYPE"
                echo "Name: $NAME"
                echo ""
                
                if [ -f "scripts/backup-restore.sh" ]; then
                    bash scripts/backup-restore.sh backup "$TYPE" "$NAME"
                else
                    print_error "Backup script not found"
                fi
                ;;
                
            "list")
                print_header
                echo -e "${CYAN}Available Backups${NC}"
                echo ""
                
                if [ -f "scripts/backup-restore.sh" ]; then
                    bash scripts/backup-restore.sh list
                else
                    print_error "Backup script not found"
                fi
                ;;
                
            "restore")
                FILE=${3:-""}
                
                if [ -z "$FILE" ]; then
                    print_error "Please provide backup file"
                    echo "Usage: workspace backup restore <backup-file>"
                    exit 1
                fi
                
                print_header
                echo -e "${CYAN}Restoring Backup${NC}"
                echo "File: $FILE"
                echo ""
                
                if [ -f "scripts/backup-restore.sh" ]; then
                    bash scripts/backup-restore.sh restore "$FILE"
                else
                    print_error "Backup script not found"
                fi
                ;;
                
            *)
                echo "Backup Operations"
                echo "================="
                echo ""
                echo "Subcommands:"
                echo "  create [type] [name] - Create backup"
                echo "  list                - List backups"
                echo "  restore <file>      - Restore backup"
                ;;
        esac
        ;;
        
    "collab")
        case ${2:-"team"} in
            "team")
                if [ -f "scripts/workspace-collab.sh" ]; then
                    bash scripts/workspace-collab.sh team "${3:-list}" "${4:-}" "${5:-}" "${6:-}"
                else
                    print_error "Collaboration script not found"
                fi
                ;;
                
            "standup")
                print_header
                echo -e "${CYAN}Daily Standup Report${NC}"
                echo ""
                
                if [ -f "scripts/workspace-collab.sh" ]; then
                    bash scripts/workspace-collab.sh standup
                else
                    print_error "Collaboration script not found"
                fi
                ;;
                
            "report")
                print_header
                echo -e "${CYAN}Collaboration Report${NC}"
                echo ""
                
                if [ -f "scripts/workspace-collab.sh" ]; then
                    bash scripts/workspace-collab.sh report
                else
                    print_error "Collaboration script not found"
                fi
                ;;
                
            *)
                echo "Collaboration Features"
                echo "====================="
                echo ""
                echo "Subcommands:"
                echo "  team [action]   - Team management"
                echo "  standup          - Daily standup report"
                echo "  report           - Collaboration report"
                ;;
        esac
        ;;

    "portfolio")
        case ${2:-"sync"} in
            "sync"|"extract"|"generate"|"export"|"report")
                print_header
                echo -e "${CYAN}Workspace Portfolio${NC}"
                echo ""

                if [ -f "scripts/workspace-portfolio.sh" ]; then
                    bash scripts/workspace-portfolio.sh "${2:-sync}" "${3:-}" "${4:-}" "${5:-}" "${6:-}" "${7:-}"
                else
                    print_error "Portfolio script not found"
                fi
                ;;

            *)
                echo "Workspace Portfolio"
                echo "==================="
                echo ""
                echo "Subcommands:"
                echo "  sync                 - Extract + generate + sync PORTFOLIO_API.json"
                echo "  extract              - Write WORKSPACE_PORTFOLIO.json"
                echo "  generate             - Write WORKSPACE_PORTFOLIO.md"
                echo "  export <fmt> [out]   - Export json|markdown|csv"
                echo "  report               - Sync + export markdown report"
                ;;
        esac
        ;;
        
    "api")
        workspace_command "api" "${@:2}"
        ;;
        
    "status")
        print_header
        echo -e "${CYAN}Workspace Status${NC}"
        echo ""
        
        echo "📊 Quick Stats:"
        echo "  - Repositories: $(find . -name ".git" -type d | wc -l)"
        echo "  - Projects: $(find morphism-ship -maxdepth 2 -type d | grep -v "^morphism-ship$" | wc -l)"
        echo "  - Scripts: $(find scripts -name "*.sh" -type f 2>/dev/null | wc -l)"
        echo "  - Templates: $(find templates -maxdepth 1 -type d 2>/dev/null | tail -n +2 | wc -l)"
        echo ""
        
        # Check API status
        if [ -f "$API_PID_FILE" ] && ps -p $(cat "$API_PID_FILE") > /dev/null 2>&1; then
            echo -e "🌐 API Server: ${GREEN}Running${NC} (http://$API_HOST:$API_PORT)"
        else
            echo -e "🌐 API Server: ${RED}Stopped${NC}"
        fi

        # Check monitor status
        if [ -f "$MONITOR_PID_FILE" ] && ps -p $(cat "$MONITOR_PID_FILE") > /dev/null 2>&1; then
            echo -e "📊 Monitor: ${GREEN}Running${NC}"
        else
            echo -e "📊 Monitor: ${RED}Stopped${NC}"
        fi
        echo ""
        
        echo -e "${YELLOW}Quick Actions:${NC}"
        echo "  workspace api start    - Start web dashboard"
        echo "  workspace monitor start - Start monitoring"
        echo "  workspace new <name>   - Create project"
        ;;
        
    "dashboard")
        print_header
        echo -e "${CYAN}Launching Web Dashboard${NC}"
        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..."
            "$0" 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
        echo -e "${CYAN}Documentation${NC}"
        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
