
import os
import json
import sys

from glob import glob
from tqdm import tqdm
from anydata.sync.sync_utils import Paginator
from anydata.utils.read import read_json


if __name__ == "__main__":

    root_local = '/data'
    root_s3 = 's3://tri-ml-sandbox-16011-us-west-2-datasets'

    dataset = sys.argv[1]
    path = f'/data/cv_webbed/videos/{dataset}'

    paginator = Paginator()

    from anydata.converters.utils import crawl
    json = crawl(path, 'metadata.json')
    json = [os.path.dirname(j) for j in json]

    failed = dataset.replace('/', '__')
    failed = open(f'failed_{failed}.txt', 'w')

    for j in tqdm(json):

        cameras = glob(f'{j}/*')
        cameras = [os.path.basename(cam) for cam in cameras if not cam.endswith('.json')]

        j = j + '/metadata.json'
        meta = read_json(j)

        if 'tarfiles' not in meta:
            print('failed tarfiles', j)
            failed.write(f'{j}\n')
            continue

        tar = meta['tarfiles']
        # cameras = meta['cameras']

        s3_path = os.path.dirname(j[len(root_local)+1:]) + '/'
        files = paginator.ls_seq(s3_path)

        has_metadata = '' in files and len(files['']) == 1 and files[''][0] == 'metadata.json'
        if not has_metadata:
            print('\nfailed has_metadata', j)
            failed.write(f'{j}\n')
            continue

        s3_cameras = [key for key in files if key != '']
        check_cameras = set(cameras) == set(s3_cameras)
        if not check_cameras:
            print('\nfailed check_cameras', j)
            print(cameras)
            print(s3_cameras)
            failed.write(f'{j}\n')
            continue

        for cam in s3_cameras:
            check_tarfiles = set(files[cam]) == set(tar)
            if not check_tarfiles:
                print('\nfailed check_tarfiles', j)
                print(len(files[cam]))
                print(len(tar))
                failed.write(f'{j}\n')
                continue

    failed.close()
