"""Two separate phases: import a bounded folder, then review and append existing items.

Default phase imports nothing. Every phase is plan-only without --apply.
No recursion; natural filename order is mechanical, not editorial intent.
"""
import argparse
from resolve_api_connection import connect
from resolve_api_media import (
    context, folder_files, import_once, order_by_paths, folder_items,
    append_once, add_write_arguments, expected_from, output,
)


def main(argv=None):
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument("folder", help="Absolute path to a small test folder")
    parser.add_argument("--extensions", required=True, help="Explicit filter, e.g. mov,mp4; not a codec guarantee")
    parser.add_argument("--phase", choices=("import", "append"), default="import")
    add_write_arguments(parser, timeline=True, files=True)
    args = parser.parse_args(argv)
    paths, digest = folder_files(args.folder, args.extensions)
    ctx = context(connect(), need_timeline=args.phase == "append")
    if args.phase == "import":
        report, _ = import_once(ctx, paths, args.apply, expected_from(args), args.expect_files_sha256)
    else:
        # This phase NEVER reimports; all paths must resolve uniquely in the folder.
        items = order_by_paths(paths, folder_items(ctx), allow_other=True)
        if args.apply and digest != args.expect_files_sha256:
            raise ValueError("Folder manifest differs from the reviewed append plan")
        # Re-scan just before the next phase; not an atomic filesystem snapshot.
        if folder_files(args.folder, args.extensions)[1] != digest:
            raise RuntimeError("Source folder changed before append")
        report = append_once(ctx, items, args.apply, expected_from(args, timeline=True))
        report.update(files=paths, files_metadata_sha256=digest)
    report["phase"] = args.phase
    output(report)
    # After import, inspect Media Pool/FPS and create an empty test timeline manually.
    # After append, inspect tracks, audio, source order and durations; save manually.


if __name__ == "__main__":
    main()
