"""Import and map inputs by proven source path, never by return order or basename."""
import argparse
from resolve_api_connection import connect
from resolve_api_media import (
    context, import_once, prepare_files, folder_items, order_by_paths,
    add_write_arguments, expected_from, output, uid, ensure_current,
)


def main(argv=None):
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument("files", nargs="+", help="Absolute local paths in the intended order")
    parser.add_argument("--read-existing", action="store_true", help="Only map existing entries; never import")
    add_write_arguments(parser, files=True)
    args = parser.parse_args(argv)
    if args.read_existing and args.apply:
        parser.error("--read-existing cannot be combined with --apply")
    ctx = context(connect())
    if args.read_existing:
        paths, digest = prepare_files(args.files)
        ordered = order_by_paths(paths, folder_items(ctx), allow_other=True)
        ensure_current(ctx)
        output({"status": "existing_mapping_read", "target": ctx.target,
                "files_metadata_sha256": digest, "write_attempted": False,
                "mapping": [{"path": p, "media_pool_id": uid(i)} for p, i in zip(paths, ordered)]})
    else:
        report, _ = import_once(ctx, args.files, args.apply, expected_from(args), args.expect_files_sha256)
        output(report)
    # A collision is reported, not overwritten in a one-value dictionary.
    # This is a current-folder map, not project-wide duplicate detection.


if __name__ == "__main__":
    main()
