"""CLI tool to import vehicles from the Go Auto crawler database into the car dealer site.

Usage:
    python import_inventory.py --source-db "f:/path/to/canada/vehicles.sqlite3" --copy-images --publish
    python import_inventory.py --source-db ... --dry-run --limit 5
    python import_inventory.py --source-db ... --stock W1N4N4HB4PJ443264
    python import_inventory.py --source-db ... --missing-only
"""
import argparse
from pathlib import Path

from app import app, import_cars_from_source


def build_parser():
    parser = argparse.ArgumentParser(
        description="Import vehicles from crawler DB into the car dealer site."
    )
    parser.add_argument("--source-db", required=True, help="Path to canada/vehicles.sqlite3.")
    parser.add_argument("--copy-images", action="store_true", help="Copy images into static/uploads/listings.")
    parser.add_argument("--overwrite", action="store_true", help="Overwrite existing listings.")
    parser.add_argument("--publish", action="store_true", help="Publish imported listings.")
    parser.add_argument("--default-status", default="Available", help="Default listing status.")
    parser.add_argument("--dry-run", action="store_true", help="Preview without writing.")
    parser.add_argument("--limit", type=int, help="Import only first N vehicles.")
    parser.add_argument("--stock", action="append", dest="selected_vins", help="Import one VIN (repeatable).")
    parser.add_argument("--stocks", help="Comma-separated VINs.")
    parser.add_argument("--missing-only", action="store_true", help="Only import VINs not already in DB.")
    return parser


def print_summary(summary):
    labels = (
        ("total_source_vehicles", "Total source vehicles"),
        ("vehicles_selected", "Vehicles selected"),
        ("listings_created", "Listings created"),
        ("listings_updated", "Listings updated"),
        ("listings_skipped", "Listings skipped"),
        ("images_found", "Images found"),
        ("images_imported", "Images imported"),
        ("images_copied", "Images copied"),
        ("missing_image_files", "Missing image files"),
        ("primary_images_set", "Primary images set"),
        ("dry_run", "Dry run"),
    )
    for key, label in labels:
        if key in summary:
            print(f"{label}: {summary[key]}")
    if summary.get("errors"):
        print("Messages:")
        for error in summary["errors"]:
            print(f"- {error}")


def main():
    args = build_parser().parse_args()
    source_db = str(Path(args.source_db))
    selected_vins = list(args.selected_vins or [])
    if args.stocks:
        selected_vins.extend(v.strip() for v in args.stocks.split(",") if v.strip())
    with app.app_context():
        summary = import_cars_from_source(
            source_db=source_db, copy_images=args.copy_images, overwrite=args.overwrite,
            publish=args.publish, default_status=args.default_status, dry_run=args.dry_run,
            selected_vins=selected_vins or None, limit=args.limit, missing_only=args.missing_only,
        )
    print_summary(summary)
    return 1 if summary.get("errors") else 0


if __name__ == "__main__":
    raise SystemExit(main())
