#!/usr/bin/env python3
"""Fetch BibTeX for one or more arXiv papers from INSPIRE-HEP.\n
Usage:
    python scripts/inspire_bibtex.py 2604.20797
    python scripts/inspire_bibtex.py 2604.20797 2604.12345
    python scripts/inspire_bibtex.py 2604.20797 -o 2604.20797.bib
    python scripts/inspire_bibtex.py 2604.20797 2604.12345 -o combined.bib
"""

import argparse
import os
import sys
import time

sys.path.insert(0, os.path.dirname(__file__))

from inspire_lib import (
    resolve_arxiv_to_inspire_id,
    fetch_single_record_bibtex,
    log_to_stderr,
    DELAY,
)
from bibtex_lib import write_bibtex_to_file

def main() -> None:
    """Parse CLI arguments and fetch paper BibTeX from INSPIRE-HEP."""
    parser = argparse.ArgumentParser(
        description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter
    )
    parser.add_argument(
        "arxiv_ids",
        nargs="+",
        help="arXiv paper ID(s), e.g. 2604.20797 or hep-ph/0603175",
    )
    parser.add_argument(
        "-o",
        "--output",
        help="Output file path (default: stdout)",
    )
    args = parser.parse_args()
    #
    entries: list[str] = []
    for i, arxiv_id in enumerate(args.arxiv_ids):
        log_to_stderr(f"Looking up arXiv:{arxiv_id} on INSPIRE...")
        recid = resolve_arxiv_to_inspire_id(arxiv_id)
        log_to_stderr(f"  recid = {recid}")
        bib = fetch_single_record_bibtex(recid)
        if bib:
            entries.append(bib)
        if i < len(args.arxiv_ids) - 1:
            time.sleep(DELAY)
    #
    write_bibtex_to_file(entries, args.output)

if __name__ == "__main__":
    main()
