#!/usr/bin/env python3
from __future__ import annotations

import argparse
import os
import sys
from pathlib import Path


def find_vault_root(start: str, marker: str | None = None) -> Path:
    """Vault ルート探索。`.obsidian/` の存在で判定する。
    marker を指定すると、ディレクトリ名一致でも探索する（後方互換のフォールバック）。
    """
    path = Path(start).resolve()
    while True:
        if (path / ".obsidian").is_dir():
            return path
        if marker and path.name == marker:
            return path
        if path.parent == path:
            label = marker or ".obsidian/"
            raise RuntimeError(f"Vault root ({label}) が見つかりません: {start}")
        path = path.parent


def main() -> None:
    parser = argparse.ArgumentParser(description="MOC proposal candidate を監査します。")
    parser.add_argument("--candidate", required=True, help="候補タイトル")
    parser.add_argument("--note", action="append", default=[], help="候補に含めるノート")
    args = parser.parse_args()

    vault_root = find_vault_root(os.path.dirname(os.path.abspath(__file__)))
    moc_root = vault_root / "Brain" / "MOC"
    existing = moc_root / f"{args.candidate}の目次.md"
    errors: list[str] = []

    if existing.exists():
        errors.append(f"既存 MOC と重複しています: {existing}. 候補タイトルを変えるか既存 MOC を使ってください。")
    if len(args.note) < 3:
        errors.append("候補ノートが不足しています。最低 3 件必要です。関連ノートを追加してください。")
    if errors:
        lines = ["監査に失敗しました。修正してください:"]
        lines.extend(f"- {error}" for error in errors)
        raise RuntimeError("\n".join(lines))

    print("OK: MOC proposal audit passed")


if __name__ == "__main__":
    try:
        main()
    except Exception as exc:
        print(f"ERROR: {exc}", file=sys.stderr)
        sys.exit(1)
