#!/usr/bin/env python3
"""List existing tag names in the Obsidian vault, alphabetically (case-insensitive sort).

The vault is discovered via scripts/find-vault (OBSIDIAN_VAULT override, else a
single .obsidian/ directory under $HOME/Documents). Pass --tags-dir to bypass.
"""

from __future__ import annotations

import argparse
import json
import sys
from pathlib import Path

sys.path.insert(0, str(Path(__file__).resolve().parent))
from _vault import find_vault  # noqa: E402


def list_tags(tags_dir: Path) -> list[str]:
    if not tags_dir.is_dir():
        raise FileNotFoundError(f"Tags directory does not exist: {tags_dir}")
    return [path.stem for path in sorted(tags_dir.glob("*.md"), key=lambda p: p.name.casefold())]


def parse_args() -> argparse.Namespace:
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument("--tags-dir", type=Path, default=None, help="Tags directory (default: <vault>/tags).")
    parser.add_argument("--format", choices=("text", "json"), default="text")
    return parser.parse_args()


def main() -> int:
    args = parse_args()
    tags_dir = args.tags_dir.expanduser() if args.tags_dir is not None else find_vault() / "tags"
    tags = list_tags(tags_dir)
    if args.format == "json":
        print(json.dumps(tags, ensure_ascii=True, indent=2))
        return 0
    for tag in tags:
        print(tag)
    return 0


if __name__ == "__main__":
    raise SystemExit(main())
