#!/usr/bin/env python3
"""
NFHC Layer 0 Encoder — command-line tool
Embeds NFHC metadata into an MP3 file's ID3 tags.

Usage:
  python3 nfhc_encode.py --title "Episode 42" --artist "Your Show" \
    --topics "AI, news, tech" episode.mp3

Requirements:
  pip install mutagen
"""
import argparse
import json
import shutil
import sys
from pathlib import Path


def main():
    p = argparse.ArgumentParser(description="Embed NFHC Layer 0 data into an MP3")
    p.add_argument("input", help="Input MP3 file")
    p.add_argument("-o", "--output", help="Output filename (default: input_nfhc.mp3)")
    p.add_argument("--title",       required=True, help="Episode or track title")
    p.add_argument("--artist",      default="",    help="Artist or host name")
    p.add_argument("--station",     default="",    help="Station or network name")
    p.add_argument("--description", default="",    help="Description or summary")
    p.add_argument("--topics",      default="",    help="Comma-separated topics")
    p.add_argument("--type",        default="music",
                   choices=["music", "broadcast"],
                   help="Content type (default: music)")
    args = p.parse_args()

    try:
        from mutagen.id3 import ID3, TXXX, GEOB, TIT2, TPE1, ID3NoHeaderError
    except ImportError:
        print("Install mutagen first:  pip install mutagen", file=sys.stderr)
        sys.exit(1)

    src = Path(args.input)
    if not src.exists():
        print(f"File not found: {args.input}", file=sys.stderr)
        sys.exit(1)

    out = Path(args.output) if args.output else src.with_name(src.stem + "_nfhc.mp3")
    shutil.copy2(src, out)

    payload = {"nfhc": "1.0", "type": args.type, "title": args.title}
    if args.artist:      payload["artist"]      = args.artist
    if args.station:     payload["station"]     = args.station
    if args.description: payload["description"] = args.description
    if args.topics:
        payload["themes"] = [t.strip() for t in args.topics.split(",") if t.strip()]

    try:
        tags = ID3(str(out))
    except ID3NoHeaderError:
        tags = ID3()

    payload_str = json.dumps(payload, separators=(",", ":"))
    tags.add(TXXX(encoding=3, desc="NFHC", text=payload_str))
    tags.add(GEOB(encoding=0, mime="application/json", filename="nfhc.json",
                  desc="NFHC", data=payload_str.encode("utf-8")))
    if args.title:  tags.add(TIT2(encoding=3, text=args.title))
    if args.artist: tags.add(TPE1(encoding=3, text=args.artist))
    tags.save(str(out), v2_version=3)

    print(f"NFHC data embedded -> {out}")
    if args.topics:
        print(f"  Topics: {args.topics}")
    print(f"  Verify: drop {out.name} into https://nothuman.fyi/lab")


if __name__ == "__main__":
    main()
