"""Seal deactivated duplicate collection registry rows so they cannot re-emerge.

Remaps SKUs onto the active twin, copies duplicate codes onto canonical aliases,
and leaves inactive rows in place as tombstones (so their codes stay reserved).

    python -m app.jobs.seal_inactive_collection_duplicates
    python -m app.jobs.seal_inactive_collection_duplicates --apply
"""

from __future__ import annotations

import argparse
import json

from db.collection_registry_identity import seal_inactive_collection_duplicates
from db.session import get_session_factory


def main() -> int:
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument("--apply", action="store_true", help="Write changes. Default is dry-run.")
    args = parser.parse_args()
    print("connecting to database...", flush=True)
    session = get_session_factory()()
    try:
        print("sealing inactive collection duplicates...", flush=True)
        stats = seal_inactive_collection_duplicates(session)
        print("seal pass finished", flush=True)
        stats["dry_run"] = not args.apply
        if args.apply:
            session.commit()
            print("committed", flush=True)
        else:
            session.rollback()
            print("rolled back (dry-run)", flush=True)
        print(json.dumps(stats, indent=2), flush=True)
    except Exception:
        session.rollback()
        raise
    finally:
        session.close()
    return 0


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