#!/bin/bash
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
export PYTHONUTF8=1

GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
NC='\033[0m'

cd "$(dirname "$0")" || exit 1

clear
echo ""
echo "============================================================"
echo "          CLAUDE KEY ACTIVATE - anon4me"
echo "============================================================"
echo ""
echo "  Server : https://anon4me.com"
echo "  Check  : https://anon4me.com/panel/keys"
echo ""
echo "  [1] Gateway uygula (key yaz + Claude ac)"
echo "  [2] Gateway sil / temizle"
echo "  [3] Cikis"
echo ""
echo "============================================================"
echo ""

printf "Secim (1/2/3): "
read CHOICE

if [ "$CHOICE" = "3" ]; then
    exit 0
fi

if [ "$CHOICE" = "2" ]; then
    echo ""
    echo "[*] Gateway ve Claude key ayarlari siliniyor..."
    python3 - <<'PY'
import json, os
profile_id = "7c4a2f91-3b8e-4d6a-9f21-a1b2c3d4e5f6"
gateway_keys = [
    "inferenceProvider", "inferenceGatewayBaseUrl", "inferenceGatewayApiKey",
    "inferenceGatewayAuthScheme", "inferenceCredentialKind",
    "chatTabEnabled", "coworkTabEnabled", "isClaudeCodeForDesktopEnabled",
]
support = os.path.expanduser("~/Library/Application Support")

def write_json(path, obj):
    os.makedirs(os.path.dirname(path), exist_ok=True)
    with open(path, "w", encoding="utf-8") as f:
        json.dump(obj, f, indent=2, ensure_ascii=False)
        f.write("\n")

def strip_gateway(path):
    if not os.path.isfile(path):
        return
    try:
        with open(path, "r", encoding="utf-8") as f:
            data = json.load(f) or {}
    except Exception:
        return
    for k in gateway_keys:
        data.pop(k, None)
    write_json(path, data)

def clear_claude3p(root):
    if not os.path.isdir(root):
        return
    kt = os.path.join(root, ".claude-key-tool.json")
    if os.path.isfile(kt):
        os.remove(kt)
    lib = os.path.join(root, "configLibrary")
    profile = os.path.join(lib, profile_id + ".json")
    if os.path.isfile(profile):
        os.remove(profile)
    meta = os.path.join(lib, "_meta.json")
    if os.path.isfile(meta):
        try:
            with open(meta, "r", encoding="utf-8") as f:
                m = json.load(f) or {}
            if m.get("appliedId") == profile_id:
                m["appliedId"] = ""
            entries = m.get("entries") or []
            m["entries"] = [e for e in entries if isinstance(e, dict) and e.get("id") != profile_id]
            m["isManaged"] = False
            write_json(meta, m)
        except Exception:
            try:
                os.remove(meta)
            except Exception:
                pass
    strip_gateway(os.path.join(root, "config.json"))
    strip_gateway(os.path.join(root, "claude_desktop_config.json"))

clear_claude3p(os.path.join(support, "Claude-3p"))
strip_gateway(os.path.join(support, "Claude", "config.json"))
sf = os.path.expanduser("~/.claude/settings.json")
if os.path.isfile(sf):
    try:
        with open(sf, "r", encoding="utf-8") as f:
            data = json.load(f) or {}
        env = data.get("env") or {}
        for k in ("ANTHROPIC_AUTH_TOKEN", "ANTHROPIC_API_KEY", "ANTHROPIC_BASE_URL", "ANTHROPIC_MODEL", "ANTHROPIC_SMALL_FAST_MODEL"):
            env.pop(k, None)
        data["env"] = env
        write_json(sf, data)
    except Exception:
        pass
cj = os.path.expanduser("~/.claude.json")
if os.path.isfile(cj):
    try:
        with open(cj, "r", encoding="utf-8") as f:
            d = json.load(f) or {}
        for k in ("primaryApiKey", "customApiKeyResponses"):
            d.pop(k, None)
        write_json(cj, d)
    except Exception:
        pass
print("OK")
PY
    echo -e "${GREEN}[OK] Gateway silindi. Claude Desktop / VS Code / Cursor'u yeniden ac.${NC}"
    echo ""
    read -n 1 -s -r -p "Cikmak icin bir tusa bas..."
    exit 0
fi

if [ "$CHOICE" != "1" ]; then
    echo ""
    echo -e "${RED}[HATA] Gecersiz secim.${NC}"
    echo ""
    read -n 1 -s -r -p "Cikmak icin bir tusa bas..."
    exit 1
fi

printf "API Key'ini gir (sk-...): "
read APIKEY

if [ -z "$APIKEY" ]; then
    echo ""
    echo -e "${RED}[HATA] API Key girilmedi. Pencereyi kapatip tekrar ac.${NC}"
    echo ""
    read -n 1 -s -r -p "Cikmak icin bir tusa bas..."
    exit 1
fi

BASE_URL="https://anon4me.com"
MODEL_MAIN="a4/claude-sonnet-4.6"
MODEL_SMALL="a4/claude-haiku-4.5"
SETTINGS_DIR="$HOME/.claude"
SETTINGS_FILE="$SETTINGS_DIR/settings.json"

mkdir -p "$SETTINGS_DIR"

export SETUP_APIKEY="$APIKEY"
export SETUP_BASE_URL="https://anon4me.com"
export SETUP_MODEL_MAIN="a4/claude-sonnet-4.6"
export SETUP_MODEL_SMALL="a4/claude-haiku-4.5"
export SETUP_SITE_NAME="anon4me"

python3 - <<'PY'
import json, os, sys
sf = os.path.expanduser("~/.claude/settings.json")
data = {}
if os.path.isfile(sf):
    try:
        with open(sf, "r", encoding="utf-8") as f:
            data = json.load(f) or {}
    except Exception:
        data = {}
env = data.get("env") or {}
env["ANTHROPIC_BASE_URL"] = os.environ.get("SETUP_BASE_URL", "")
env["ANTHROPIC_AUTH_TOKEN"] = os.environ.get("SETUP_APIKEY", "")
env["ANTHROPIC_MODEL"] = os.environ.get("SETUP_MODEL_MAIN", "")
env["ANTHROPIC_SMALL_FAST_MODEL"] = os.environ.get("SETUP_MODEL_SMALL", "")
env.pop("ANTHROPIC_API_KEY", None)
data["env"] = env
os.makedirs(os.path.dirname(sf), exist_ok=True)
with open(sf, "w", encoding="utf-8") as f:
    json.dump(data, f, indent=2, ensure_ascii=False)
    f.write("
")
cj = os.path.expanduser("~/.claude.json")
if os.path.isfile(cj):
    try:
        with open(cj, "r", encoding="utf-8") as f:
            d = json.load(f) or {}
        for k in ("primaryApiKey", "customApiKeyResponses"):
            d.pop(k, None)
        with open(cj, "w", encoding="utf-8") as f:
            json.dump(d, f, indent=2, ensure_ascii=False)
            f.write("
")
    except Exception:
        pass

support = os.path.expanduser("~/Library/Application Support")
local_3p = os.path.join(support, "Claude-3p")
profile_id = "7c4a2f91-3b8e-4d6a-9f21-a1b2c3d4e5f6"
site_name = os.environ.get("SETUP_SITE_NAME") or "Gateway"
base = os.environ.get("SETUP_BASE_URL", "")
key = os.environ.get("SETUP_APIKEY", "")

def write_json(path, obj):
    os.makedirs(os.path.dirname(path), exist_ok=True)
    with open(path, "w", encoding="utf-8") as f:
        json.dump(obj, f, indent=2, ensure_ascii=False)
        f.write("\n")

def merge_gateway(data):
    if not isinstance(data, dict):
        data = {}
    data["inferenceProvider"] = "gateway"
    data["inferenceGatewayBaseUrl"] = base
    data["inferenceGatewayApiKey"] = key
    data["inferenceGatewayAuthScheme"] = "x-api-key"
    data["inferenceCredentialKind"] = "static"
    data["chatTabEnabled"] = True
    data["coworkTabEnabled"] = True
    data["isClaudeCodeForDesktopEnabled"] = True
    data.pop("oauth:tokenCache", None)
    data.pop("oauth:tokenCacheV2", None)
    return data

def patch_json(path):
    data = {}
    if os.path.isfile(path):
        try:
            with open(path, "r", encoding="utf-8") as f:
                data = json.load(f) or {}
        except Exception:
            data = {}
    write_json(path, merge_gateway(data))

def apply_claude3p(root):
    os.makedirs(root, exist_ok=True)
    write_json(os.path.join(root, "developer_settings.json"), {"allowDevTools": True})
    write_json(os.path.join(root, ".claude-key-tool.json"), {"version": "1.2.0", "key": key, "gateway": base})
    lib = os.path.join(root, "configLibrary")
    write_json(os.path.join(lib, profile_id + ".json"), merge_gateway({}))
    write_json(os.path.join(lib, "_meta.json"), {
        "appliedId": profile_id,
        "entries": [{"id": profile_id, "name": site_name}],
    })
    patch_json(os.path.join(root, "config.json"))

apply_claude3p(local_3p)
apply_claude3p(os.path.join(support, "Claude-3p"))
patch_json(os.path.join(support, "Claude", "config.json"))
try:
    import subprocess
    subprocess.Popen(["open", "-a", "Claude"])
except Exception:
    pass
PY

export ANTHROPIC_BASE_URL="$BASE_URL"
export ANTHROPIC_AUTH_TOKEN="$APIKEY"
export ANTHROPIC_MODEL="$MODEL_MAIN"
export ANTHROPIC_SMALL_FAST_MODEL="$MODEL_SMALL"
unset ANTHROPIC_API_KEY
unset SETUP_APIKEY

echo ""
echo -e "${GREEN}[OK] Key kaydedildi. Claude Desktop aciliyor...${NC}"
echo "  Acilista Continue with Gateway / gateway profilini sec."
echo ""
read -n 1 -s -r -p "Cikmak icin bir tusa bas..."