"""Import canonical-to-channel attribute aliases from CSV.

CLI:
    python -m app.jobs.import_channel_aliases --file channel_aliases.csv
"""

from __future__ import annotations

import argparse
import sys
from pathlib import Path

import pandas as pd


def run_import_channel_aliases(file_path: str) -> dict:
    from db.channel_aliases import import_channel_attribute_alias_dataframe
    from db.session import get_session

    path = Path(file_path)
    if not path.exists() or not path.is_file():
        return {"status": "failed", "error": f"File not found: {file_path}"}
    if path.suffix.lower() != ".csv":
        return {"status": "failed", "error": "Only CSV files are supported"}
    try:
        df = pd.read_csv(path, dtype=str, keep_default_na=False)
    except Exception as exc:
        return {"status": "failed", "error": f"Failed to read CSV: {exc}"}

    with get_session() as session:
        stats = import_channel_attribute_alias_dataframe(session, df)
        session.commit()
    return {"status": "ok", "file": str(path), **stats}


def main() -> int:
    parser = argparse.ArgumentParser(description="Import canonical-to-channel attribute aliases")
    parser.add_argument("--file", required=True, help="Channel alias CSV path")
    args = parser.parse_args()

    result = run_import_channel_aliases(args.file)
    if result.get("status") != "ok":
        print(result.get("error", "unknown error"), file=sys.stderr)
        return 1
    print(
        "Channel alias import complete: "
        f"input_rows={result.get('input_rows', 0)}, "
        f"upserted={result.get('upserted', 0)}, "
        f"skipped={result.get('skipped', 0)}"
    )
    return 0


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