#!/bin/bash
# Setup script for agent self-configuration
# Usage: bash run.sh [personal|team-admin|team-shared|all]

set -e

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# Setup is in skills/setup/, so need to go up 2 levels to get repo root
REPO_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
WORKSPACE_SKILLS="$HOME/.openclaw/workspace/skills"
WORKSPACE_MEMORY="$HOME/.openclaw/workspace/memory"
OPENCLAW_CONFIG="$HOME/.openclaw/openclaw.json"

ROLE=${1:-"all"}

echo "=== OpenClaw Team Setup ==="
echo "Role: $ROLE"
echo ""

# Function to configure extraDirs for skills
configure_skill_extra_dirs() {
    local dir1="$1"
    local dir2="$2"
    if [ -f "$OPENCLAW_CONFIG" ]; then
        python3 << EOF
import json
import os

config_path = os.path.expanduser("$OPENCLAW_CONFIG")
with open(config_path, 'r') as f:
    config = json.load(f)

if 'skills' not in config:
    config['skills'] = {}
if 'load' not in config['skills']:
    config['skills']['load'] = {}

config['skills']['load']['extraDirs'] = ["$dir1", "$dir2"]

with open(config_path, 'w') as f:
    json.dump(config, f, indent=2)
print("  [OK] Configured skills.load.extraDirs")
EOF
    else
        echo "  [SKIP] $OPENCLAW_CONFIG not found"
    fi
}

# Function to link a skill
link_skill() {
    local skill_name=$1
    local skill_path="$REPO_DIR/skills/team-admin/$skill_name"
    local link_name="team-$skill_name"
    
    if [ ! -d "$skill_path" ]; then
        echo "  [SKIP] $skill_name not found"
        return
    fi
    
    mkdir -p "$WORKSPACE_SKILLS"
    rm -f "$WORKSPACE_SKILLS/$link_name"
    ln -sf "$skill_path" "$WORKSPACE_SKILLS/$link_name"
    echo "  [OK] Linked $link_name"
}

# Function to link a skill from a specific team directory
link_skill_from() {
    local skill_name=$1
    local team_dir=$2
    local skill_path="$REPO_DIR/skills/$team_dir/$skill_name"
    local link_name="team-$skill_name"
    
    if [ ! -d "$skill_path" ]; then
        echo "  [SKIP] $skill_name not found in $team_dir"
        return
    fi
    
    mkdir -p "$WORKSPACE_SKILLS"
    rm -f "$WORKSPACE_SKILLS/$link_name"
    ln -sf "$skill_path" "$WORKSPACE_SKILLS/$link_name"
    echo "  [OK] Linked $link_name from $team_dir"
}

# Function to link a cronjob
link_cronjob() {
    local cronjob_name=$1
    local cronjob_path="$REPO_DIR/cronjobs/$2/$cronjob_name"
    
    if [ ! -d "$cronjob_path" ]; then
        echo "  [SKIP] $cronjob_name not found in $2"
        return
    fi
    echo "  [OK] $cronjob_name (manual setup required: openclaw cron add)"
}

# Function to copy team memories
copy_memories() {
    local memories_dir="$REPO_DIR/memories"
    local memory_files=("team_memory.md" "configuration.md")
    
    mkdir -p "$WORKSPACE_MEMORY"
    
    for file in "${memory_files[@]}"; do
        local src="$memories_dir/$file"
        if [ -f "$src" ]; then
            cp "$src" "$WORKSPACE_MEMORY/$file"
            echo "  [OK] Copied $file to workspace memory"
        else
            echo "  [SKIP] $file not found"
        fi
    done
}

setup_personal() {
    echo "=== Setting up personal ==="
    link_skill "check-openclaw-status"
    copy_memories
    configure_skill_extra_dirs "$REPO_DIR/skills/team-common" "$REPO_DIR/skills/team-common"
    echo ""
}

setup_team_admin() {
    echo "=== Setting up team-admin ==="
    link_skill "daily-inspection"
    link_skill "backup-config"
    link_skill_from "github-auth" "team-common"
    link_cronjob "daily-inspection" "team-admin"
    link_cronjob "daily-memory-backup" "team-admin"
    configure_skill_extra_dirs "$REPO_DIR/skills/team-admin" "$REPO_DIR/skills/team-common"
    echo ""
}

setup_team_code_expert() {
    echo "=== Setting up team-code-expert ==="
    link_skill_from "pr-review-daemon" "team-code-expert"
    link_skill_from "claude-code-dispatch" "team-code-expert"
    link_skill_from "tidbcloud-github-access" "team-code-expert"
    link_skill_from "github-auth" "team-common"
    configure_skill_extra_dirs "$REPO_DIR/skills/team-code-expert" "$REPO_DIR/skills/team-common"
    echo ""
}

setup_team_workflow() {
    echo "=== Setting up team-workflow ==="
    link_skill "daily-inspection"
    link_cronjob "daily-task-sync" "team-workflow"
    link_cronjob "weekly-ticket-report" "team-workflow"
    link_cronjob "ai-news" "team-workflow"
    link_cronjob "bi-weekly-ai-news" "team-workflow"
    link_cronjob "weekly-tidb-competitor" "team-workflow"
    configure_skill_extra_dirs "$REPO_DIR/skills/team-workflow" "$REPO_DIR/skills/team-common"
    echo ""
}

case $ROLE in
    personal)
        setup_personal
        ;;
    team-admin)
        setup_team_admin
        ;;
    team-workflow)
        setup_team_workflow
        ;;
    team-code-expert)
        setup_team_code_expert
        ;;
    all)
        setup_personal
        setup_team_admin
        setup_team_workflow
        setup_team_code_expert
        ;;
    *)
        echo "Usage: $0 [personal|team-admin|team-workflow|team-code-expert|all]"
        exit 1
        ;;
esac

echo "=== Setup Complete ==="
echo "Skills linked to: $WORKSPACE_SKILLS/"
