#!/usr/bin/env python3
# effort_level_check.py — Jarvis安全装置D (本体)
#
# 役割:
#   起動シーケンス手順③で実行される。Claude Code settings.json の effortLevel が
#   期待値 (xhigh) 以外なら REMINDER.md #18 を自動追記する。
#
# 期待: effortLevel == EXPECTED → "OK: effortLevel=xhigh" を出力して exit 0
# 異常: effortLevel != EXPECTED → REMINDER.md に #18 が無ければ追記
#
# settings.json 探索順:
#   1. ~/.claude/settings.json (Mac/Linux 標準)
#   2. %USERPROFILE%\.claude\settings.json (Win)
#   3. /c/Users/Ritzk/.claude/settings.json (Git Bash Win Ritzk 環境)
#
# 経緯: 2026-05-13 Mac専用bash実装→Pythonラッパー化→.py本体が物理消失していたバグを2026-05-14未明に再生成
import json
import os
import sys
from pathlib import Path

EXPECTED = "xhigh"
# 2026-06-09 ユーザー判断: effort実験中・20xプランで余裕のため max も許容（xhigh以上は全部OK扱い）
# 根拠: memory/feedback_effort_level.md「🔄 2026-06-09 更新（後発優先・現行方針）」
ACCEPTED = ("xhigh", "max")


def find_settings() -> "Path | None":
    candidates = [
        Path.home() / ".claude" / "settings.json",
        Path("/c/Users/Ritzk/.claude/settings.json"),
        Path(r"C:\Users\Ritzk\.claude\settings.json"),
    ]
    for p in candidates:
        try:
            if p.is_file():
                return p
        except OSError:
            continue
    return None


def find_reminder() -> "Path | None":
    # スクリプトから起業フォルダー直下を遡って探す
    here = Path(__file__).resolve()
    for parent in [here.parent, *here.parents]:
        for candidate in (parent / "REMINDER.md", parent / "司令塔" / "REMINDER.md"):
            if candidate.is_file():
                return candidate
    return None


REMINDER_BLOCK = """
### #18 ⚠️ effortLevel が xhigh 以外で稼働中（自動検出）

- **検出日時：** {ts}
- **検出値：** effortLevel={value} （期待: xhigh）
- **影響：** Jarvis本体の thinking 枠が縮小・self_check/HEAVY判定精度低下リスク
- **対処：** `~/.claude/settings.json` の `"effortLevel"` を `"xhigh"` に書き換え→Claude Code 再起動
- **詳細：** memory/feedback_effort_level_xhigh.md
- **毎ターン報告対象。**
"""


def append_reminder(reminder_path: Path, value: str) -> bool:
    text = reminder_path.read_text(encoding="utf-8")
    if "### #18" in text and "effortLevel が xhigh 以外" in text:
        return False  # 既存・重複防止
    from datetime import datetime, timezone, timedelta

    jst = timezone(timedelta(hours=9))
    ts = datetime.now(jst).strftime("%Y-%m-%d %H:%M JST")
    block = REMINDER_BLOCK.format(ts=ts, value=value)
    reminder_path.write_text(text.rstrip() + "\n\n" + block.strip() + "\n", encoding="utf-8")
    return True


def main() -> int:
    settings = find_settings()
    if settings is None:
        print("WARN: settings.json が見つからない (skip)")
        return 0  # exit 0 で起動シーケンス継続

    try:
        data = json.loads(settings.read_text(encoding="utf-8"))
    except Exception as e:
        print(f"WARN: settings.json パース失敗: {e} (skip)")
        return 0

    value = data.get("effortLevel", "(未設定)")
    if value in ACCEPTED:
        print(f"OK: effortLevel={value}")
        return 0

    reminder = find_reminder()
    if reminder is None:
        print(f"NG: effortLevel={value} (期待 {EXPECTED}) / REMINDER.md 未発見・追記skip")
        return 0

    appended = append_reminder(reminder, value)
    if appended:
        print(f"NG: effortLevel={value} (期待 {EXPECTED}) → REMINDER.md #18 追記済")
    else:
        print(f"NG: effortLevel={value} (期待 {EXPECTED}) / REMINDER.md #18 既存・skip")
    return 0


if __name__ == "__main__":
    sys.exit(main())
