"""Assign collection vignette images to kitchen package SKUs.

Examples:
  python -m app.jobs.sync_package_vignette_images --dry-run
  python -m app.jobs.sync_package_vignette_images --collection-code ACH --apply
  python -m app.jobs.sync_package_vignette_images --sku ACH-PKG-L810 --sku ACH-PKG-U101010 --apply
"""

from __future__ import annotations

import argparse
import json
from typing import Optional, Sequence


def main(argv: Optional[Sequence[str]] = None) -> int:
    from db.master_product_images import sync_package_vignette_images
    from db.session import get_session

    parser = argparse.ArgumentParser(description="Assign collection vignette images to package SKUs")
    parser.add_argument("--sku", action="append", default=[], help="Package master SKU; repeatable")
    parser.add_argument("--collection-code", action="append", default=[], help="Collection code; repeatable")
    mode = parser.add_mutually_exclusive_group(required=True)
    mode.add_argument("--dry-run", action="store_true")
    mode.add_argument("--apply", action="store_true")
    args = parser.parse_args(list(argv) if argv is not None else None)

    with get_session() as session:
        result = sync_package_vignette_images(
            session,
            skus=args.sku or None,
            collection_codes=args.collection_code or None,
            dry_run=bool(args.dry_run),
        )
        if args.apply:
            session.commit()
        else:
            session.rollback()
    print(json.dumps(result, indent=2))
    return 0


if __name__ == "__main__":
    raise SystemExit(main())
