"""Push master gallery images to Shopify (images-only mode).

CLI:
    python -m app.jobs.shopify_push_images --dry-run
    python -m app.jobs.shopify_push_images --limit 10 --no-dry-run
"""

from __future__ import annotations

import argparse
import json
import logging
import sys

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)


def run_shopify_push_images(
    *,
    dry_run: bool = True,
    limit: int | None = None,
    skus: list[str] | None = None,
    shop_code: str | None = None,
    connection_id: int | None = None,
    force: bool = False,
) -> dict:
    from db.session import get_session
    from shopify.media_sync import push_product_images

    with get_session() as session:
        summary = push_product_images(
            session,
            dry_run=dry_run,
            limit=limit,
            skus=skus,
            shop_code=shop_code,
            connection_id=connection_id,
            force=force,
        )
        session.commit()
    return summary


def main() -> int:
    parser = argparse.ArgumentParser(description="Push master gallery images to Shopify")
    parser.add_argument("--dry-run", dest="dry_run", action="store_true", default=True)
    parser.add_argument("--no-dry-run", dest="dry_run", action="store_false")
    parser.add_argument("--limit", type=int, default=None)
    parser.add_argument("--skus", nargs="*", default=None)
    parser.add_argument("--shop-code", default=None)
    parser.add_argument("--connection-id", type=int, default=None)
    parser.add_argument("--force", action="store_true")
    args = parser.parse_args()

    summary = run_shopify_push_images(
        dry_run=args.dry_run,
        limit=args.limit,
        skus=args.skus,
        shop_code=args.shop_code,
        connection_id=args.connection_id,
        force=args.force,
    )
    print(json.dumps(summary, indent=2))
    return 0 if summary.get("status") == "ok" else 1


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