# Copyright 2026 Toyota Research Institute.  All rights reserved.

import os
import argparse
import subprocess
import numpy as np
import multiprocessing

from glob import glob
from tqdm import tqdm
from functools import partial

from anydata.sync.sync_utils import get_s3_files_and_folders, multi_thread, get_extras_base, aws_s3_rm

####################################

def parse_args(num_procs=24):
    parser = argparse.ArgumentParser()
    parser.add_argument('path', type=str)
    parser.add_argument('--num_procs', type=int, default=num_procs)
    parser.add_argument('--verbose', action='store_true')
    parser.add_argument('--dryrun', action='store_true')
    parser.add_argument("--nested", type=int, default=0)
    args = parser.parse_args()

    args.src = args.path
    args.extras = get_extras_base(args)

    return args

################################

def delete_sequences(i, seqs, args):
    progress = tqdm(seqs, ncols=96, leave=False)
    for seq in progress:
        progress.set_description(f'### Thread {i+1}/{args.num_procs}')
        delete_sequence(seq, args)

def delete_sequence(seq, args):
    aws_s3_rm(seq, recursive=True, quiet=False, extras=args.extras)

################################

if __name__ == "__main__":

    args = parse_args()
    files, seqs = get_s3_files_and_folders(args.src)

    multi_thread = partial(multi_thread, name='DELETING FROM S3',
        fn_seqs=delete_sequences)

    if args.nested == 0:
        multi_thread(seqs, files, args)
    else:
        for i in range(len(seqs)):
            files_i, seqs_i = get_s3_files_and_folders(f'{seqs[i]}')
            if args.nested == 1:
                multi_thread(seqs_i, files_i, args)
            else:
                for j in range(len(seqs_i)):
                    files_j, seqs_j = get_s3_files_and_folders(f'{seqs_i[j]}')
                    multi_thread(seqs_j, files_j, args)

    delete_sequence(args.src, args)


################################
