#!/usr/bin/env bash
# =====================================================================
# 三上（アドネス株式会社）の Claude Code の道具を、まるごと入れるスクリプト
#   使い方（Mac のターミナル、または AI に打ってもらう）:
#     curl -fsSL https://mikami-claude-setup.pages.dev/setup.sh | bash
#   入れるもの:
#     Homebrew / Node.js / gh（GitHub CLI）/ Claude Code（CLI）/ Codex CLI
#     Claude Code の MCP: addness・cloudflare（任意で freee）
#     Codex の MCP: addness
#     Claude Code の Codex プラグイン（Claude Code から Codex に実装を頼める）
#   やらないこと:
#     ログイン（次の手順で、ブラウザの「許可する」を押す）
#     API キー・パスワードの入力、既にある設定の上書き
#   任意の道具も入れる時: SETUP_OPTIONAL=1 を付ける
#     curl -fsSL https://mikami-claude-setup.pages.dev/setup.sh | SETUP_OPTIONAL=1 bash
# =====================================================================
set -u

log()  { printf '\n\033[1;34m▶ %s\033[0m\n' "$*"; }
ok()   { printf '  \033[32m✔\033[0m %s\n' "$*"; }
skip() { printf '  ・%s（既にある）\n' "$*"; }
warn() { printf '  \033[33m!\033[0m %s\n' "$*"; }
has()  { command -v "$1" >/dev/null 2>&1; }

if [ "$(uname -s)" != "Darwin" ]; then
  echo "このスクリプトは Mac 用です。Windows は WSL（Ubuntu）の中で実行するか、AI に「同じ内容を Windows 向けに読み替えて進めて」と頼んでください。"
  exit 1
fi

# ---------- 1. Homebrew ----------
if has brew; then skip "Homebrew"; else
  log "Homebrew を入れます（Mac のパスワードを聞かれたら入力。画面の指示で Enter）"
  /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
fi
if [ -x /opt/homebrew/bin/brew ]; then eval "$(/opt/homebrew/bin/brew shellenv)"
elif [ -x /usr/local/bin/brew ]; then eval "$(/usr/local/bin/brew shellenv)"; fi
has brew || { warn "brew が見つかりません。ターミナルを開き直してから、もう一度このスクリプトを実行してください。"; exit 1; }

# ---------- 2. Node.js / gh ----------
for f in node gh; do
  if has "$f"; then skip "$f ($("$f" --version 2>/dev/null | head -1))"; else
    log "$f を入れます"; brew install "$f"
  fi
done

# ---------- 3. Claude Code（CLI）----------
export PATH="$HOME/.local/bin:$PATH"
if has claude; then skip "Claude Code CLI ($(claude --version 2>/dev/null))"; else
  log "Claude Code（CLI）を入れます"
  curl -fsSL https://claude.ai/install.sh | bash
  export PATH="$HOME/.local/bin:$PATH"
fi
has claude || { warn "claude が見つかりません。ターミナルを開き直して、もう一度実行してください。"; exit 1; }

# ---------- 4. Codex CLI ----------
if has codex; then skip "Codex CLI ($(codex --version 2>/dev/null))"; else
  log "Codex CLI を入れます"
  brew install codex || npm install -g @openai/codex
fi

# ---------- 5. Claude Code の MCP（ユーザー全体の設定に入れる）----------
add_mcp() {
  local name="$1" url="$2"
  if claude mcp get "$name" >/dev/null 2>&1; then skip "Claude Code の MCP: $name"; else
    log "Claude Code に MCP「$name」をつなぐ設定を入れます（ログインは次の手順）"
    claude mcp add --transport http "$name" "$url" --scope user
  fi
}
add_mcp addness    https://vt.api.addness.com/mcp
add_mcp cloudflare https://mcp.cloudflare.com/mcp
if [ "${SETUP_OPTIONAL:-0}" = "1" ]; then
  add_mcp freee https://mcp.freee.co.jp/mcp
fi

# ---------- 6. Codex の MCP ----------
if has codex; then
  if codex mcp get addness >/dev/null 2>&1; then skip "Codex の MCP: addness"; else
    log "Codex に MCP「addness」をつなぐ設定を入れます"
    codex mcp add addness --url https://vt.api.addness.com/mcp
  fi
fi

# ---------- 7. Claude Code の Codex プラグイン ----------
if claude plugin marketplace list 2>/dev/null | grep -q 'openai/codex-plugin-cc'; then skip "プラグインの配布元: openai-codex"; else
  log "プラグインの配布元 openai/codex-plugin-cc を登録します"
  claude plugin marketplace add openai/codex-plugin-cc
fi
if claude plugin list 2>/dev/null | grep -q 'codex@openai-codex'; then skip "プラグイン: codex@openai-codex"; else
  log "Claude Code に Codex プラグインを入れます"
  claude plugin install codex@openai-codex --scope user -y || warn "Codex プラグインが入りませんでした。Claude Code の中で /plugin から codex を入れてください。"
fi

# ---------- まとめ ----------
log "入った道具"
for f in brew node gh claude codex; do has "$f" && ok "$f: $("$f" --version 2>/dev/null | head -1)"; done
echo
echo "次は「ログイン」です（それぞれブラウザが開くので「許可する」を押す）:"
echo "  1. claude                      … Claude Code にログイン（Claude の有料プラン）"
echo "  2. claude mcp login addness    … Addness（https://www.addness.com に登録してから）"
echo "  3. claude mcp login cloudflare … Cloudflare（無料アカウントで可）"
echo "  4. npx wrangler login          … Cloudflare にページを出す道具（同じアカウント）"
echo "  5. codex login                 … Codex（ChatGPT のアカウント）"
echo "  6. codex mcp login addness     … Codex からも Addness を読めるように"
echo "  7. gh auth login               … GitHub（使う人だけ）"
echo "ログインが終わったら、Claude のアプリをいったん終了（Command + Q）して開き直すと、MCP の道具が見えます。"
