"""Import approved source-to-canonical/channel attribute mappings from CSV.

CLI:
    python -m app.jobs.import_attribute_mappings --file attribute_mapping_review.csv
"""

from __future__ import annotations

import argparse
import sys
from pathlib import Path

import pandas as pd


def run_import_attribute_mappings(
    file_path: str,
    *,
    default_source_label: str = "mapping_csv",
    accept_suggestions: bool = False,
) -> dict:
    from db.attribute_mapping import import_attribute_mapping_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_attribute_mapping_dataframe(
            session,
            df,
            default_source_label=default_source_label,
            accept_suggestions=accept_suggestions,
        )
        session.commit()
    return {"status": "ok", "file": str(path), **stats}


def main() -> int:
    parser = argparse.ArgumentParser(description="Import attribute mappings from CSV")
    parser.add_argument("--file", required=True, help="Mapping CSV path")
    parser.add_argument("--default-source-label", default="mapping_csv", help="Fallback source label")
    parser.add_argument(
        "--accept-suggestions",
        action="store_true",
        help="Import suggested_canonical_code/suggested_target_scope from review CSV rows",
    )
    args = parser.parse_args()

    result = run_import_attribute_mappings(
        args.file,
        default_source_label=args.default_source_label,
        accept_suggestions=args.accept_suggestions,
    )
    if result.get("status") != "ok":
        print(result.get("error", "unknown error"), file=sys.stderr)
        return 1
    print(
        "Attribute mapping 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())
