#!/usr/bin/env bash
# ketacli setup — install ketacli skills for various AI coding agents
set -e
umask 077

# Try to find ketacli package directory
# When installed via pip, the skills are in the ketacli package directory
for dir in /usr/local/lib/python*/dist-packages/ketacli \
           /usr/lib/python*/dist-packages/ketacli \
           "$HOME/.local/lib/python*/site-packages/ketacli"; do
    if [ -d "$dir/skills" ]; then
        INSTALL_DIR="$dir"
        break
    fi
done

# Fallback to script location or current directory
if [ -z "$INSTALL_DIR" ]; then
    if [ -d "/data/git-project/ketacli" ]; then
        INSTALL_DIR="/data/git-project/ketacli"
    else
        SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
        # If script is in a bin directory, go up to find ketacli package
        if [ -f "$(dirname "$SCRIPT_DIR")/ketacli/skills/ketacli-dev/SKILL.md" ]; then
            INSTALL_DIR="$(dirname "$SCRIPT_DIR")/ketacli"
        else
            INSTALL_DIR="$SCRIPT_DIR"
        fi
    fi
fi

# ─── Parse flags ──────────────────────────────────────────────
HOST="auto"
LOCAL_INSTALL=0
SKILL_PREFIX=0
QUIET=0

while [ $# -gt 0 ]; do
  case "$1" in
    --host) HOST="$2"; shift 2 ;;
    --host=*) HOST="${1#--host=}"; shift ;;
    --local) LOCAL_INSTALL=1; shift ;;
    -q|--quiet) QUIET=1; shift ;;
    *) shift ;;
  esac
done

log() { [ "$QUIET" -eq 0 ] && echo "$@" || true; }

# ─── Detect available agents ───────────────────────────────────
INSTALL_OPENCODE=0
INSTALL_CLAUDE=0
INSTALL_CODEX=0
INSTALL_OPENCLAW=0

if [ "$HOST" = "auto" ]; then
  command -v opencode >/dev/null 2>&1 && INSTALL_OPENCODE=1
  command -v claude >/dev/null 2>&1 && INSTALL_CLAUDE=1
  command -v codex >/dev/null 2>&1 && INSTALL_CODEX=1
  command -v openclaw >/dev/null 2>&1 && INSTALL_OPENCLAW=1
  
  # Default to opencode if none found
  if [ "$INSTALL_OPENCODE" -eq 0 ] && [ "$INSTALL_CLAUDE" -eq 0 ] && [ "$INSTALL_CODEX" -eq 0 ] && [ "$INSTALL_OPENCLAW" -eq 0 ]; then
    INSTALL_OPENCODE=1
  fi
elif [ "$HOST" = "opencode" ]; then
  INSTALL_OPENCODE=1
elif [ "$HOST" = "claude" ]; then
  INSTALL_CLAUDE=1
elif [ "$HOST" = "codex" ]; then
  INSTALL_CODEX=1
elif [ "$HOST" = "openclaw" ]; then
  INSTALL_OPENCLAW=1
fi

# ─── Link skill directories ─────────────────────────────────────
link_skill_dirs() {
  local source_dir="$1"
  local skills_dir="$2"
  local linked=()
  
  mkdir -p "$skills_dir"
  
  for skill_dir in "$INSTALL_DIR"/skills/*/; do
    if [ -f "$skill_dir/SKILL.md" ]; then
      dir_name="$(basename "$skill_dir")"
      target="$skills_dir/$dir_name"
      
      # Create or update symlink
      if [ -L "$target" ]; then
        rm -f "$target"
      fi
      mkdir -p "$target"
      ln -snf "$skill_dir/SKILL.md" "$target/SKILL.md"
      linked+=("$dir_name")
    fi
  done
  
  if [ ${#linked[@]} -gt 0 ]; then
    log "  linked skills: ${linked[*]}"
  fi
}

# ─── Install for OpenCode ────────────────────────────────────────
if [ "$INSTALL_OPENCODE" -eq 1 ]; then
  log "Installing ketacli skills for OpenCode..."
  
  OPENCODE_GLOBAL="$HOME/.config/opencode/skills/ketacli"
  mkdir -p "$(dirname "$OPENCODE_GLOBAL")"
  
  if [ -L "$OPENCODE_GLOBAL" ]; then
    rm -f "$OPENCODE_GLOBAL"
  fi
  ln -snf "$INSTALL_DIR" "$OPENCODE_GLOBAL"
  
  # Also link individual skills
  OPENCODE_SKILLS="$HOME/.config/opencode/skills"
  link_skill_dirs "$INSTALL_DIR" "$OPENCODE_SKILLS"
  
  log "  installed to: $OPENCODE_GLOBAL"
fi

# ─── Install for Claude Code ─────────────────────────────────────
if [ "$INSTALL_CLAUDE" -eq 1 ]; then
  log "Installing ketacli skills for Claude Code..."
  
  CLAUDE_GLOBAL="$HOME/.claude/skills/ketacli"
  mkdir -p "$(dirname "$CLAUDE_GLOBAL")"
  
  if [ -L "$CLAUDE_GLOBAL" ]; then
    rm -f "$CLAUDE_GLOBAL"
  fi
  ln -snf "$INSTALL_DIR" "$CLAUDE_GLOBAL"
  
  CLAUDE_SKILLS="$HOME/.claude/skills"
  link_skill_dirs "$INSTALL_DIR" "$CLAUDE_SKILLS"
  
  log "  installed to: $CLAUDE_GLOBAL"
fi

# ─── Install for Codex CLI ──────────────────────────────────────
if [ "$INSTALL_CODEX" -eq 1 ]; then
  log "Installing ketacli skills for OpenAI Codex CLI..."
  
  CODEX_SKILLS="$HOME/.codex/skills/ketacli"
  mkdir -p "$CODEX_SKILLS"
  
  # Create .agents format for Codex
  AGENTS_DIR="$CODEX_SKILLS/.agents/skills"
  mkdir -p "$AGENTS_DIR"
  
  for skill_dir in "$INSTALL_DIR"/skills/*/; do
    if [ -f "$skill_dir/SKILL.md" ]; then
      skill_name="$(basename "$skill_dir")"
      
      # Copy SKILL.md (Codex doesn't support symlinks well)
      mkdir -p "$AGENTS_DIR/ketacli-$skill_name"
      cp "$skill_dir/SKILL.md" "$AGENTS_DIR/ketacli-$skill_name/SKILL.md"
    fi
  done
  
  log "  installed to: $CODEX_SKILLS"
fi

# ─── Install for OpenClaw ───────────────────────────────────────
if [ "$INSTALL_OPENCLAW" -eq 1 ]; then
  log "Installing ketacli skills for OpenClaw..."
  
  OPENCLAW_GLOBAL="$HOME/.openclaw/skills/ketacli"
  mkdir -p "$(dirname "$OPENCLAW_GLOBAL")"
  
  if [ -L "$OPENCLAW_GLOBAL" ]; then
    rm -f "$OPENCLAW_GLOBAL"
  fi
  ln -snf "$INSTALL_DIR" "$OPENCLAW_GLOBAL"
  
  log "  installed to: $OPENCLAW_GLOBAL"
fi

log "Done! ketacli skills installed."
log ""
log "Available skills:"
log "  - /ketacli-dev    : ketacli development workflow"
log "  - /ketacli-manage : KetaDB resource management (CRUD)"
log "  - /ketacli-mock   : Mock data generation"
log "  - /ketacli-dc-task: Collection task management"
log "  - /spl-search     : SPL search query"
