#!/usr/bin/env python3
"""
See Old Script:
    ~/code/watch/scripts/run_pseudolive_consolidate.py
"""
import os
import subprocess
import ubelt as ub
import scriptconfig as scfg

from geowatch.utils.util_framework import download_region


class PseudoliveConsolidateConfig(scfg.DataConfig):
    """
    Run pseudolive consolidation script for TA-2 region / site model outputs
    """
    region_id = scfg.Value(None, type=str, position=1, required=True, help='Region ID')
    input_region_path = scfg.Value(None, type=str, position=2, required=True, help=ub.paragraph(
        '''
        Path to input T&E Baseline Framework Region definition JSON
        '''))
    previous_consolidated_output = scfg.Value(None, type=str, position=3, required=True, help=ub.paragraph(
        '''
        S3 path to consolidated regions / sites from previous
        iteration
        '''))
    current_output = scfg.Value(None, type=str, position=4, required=True, help=ub.paragraph(
        '''
        S3 path to regions / sites from current iteration
        '''))
    aws_profile = scfg.Value(None, type=str, help=ub.paragraph(
        '''
        AWS Profile to use for AWS S3 CLI commands
        '''))
    outbucket = scfg.Value(None, type=str, required=True, short_alias=['o'], help=ub.paragraph(
        '''
        S3 Output directory for STAC item / asset egress
        '''))
    performer_suffix = scfg.Value(None, type=str, short_alias=['s'], help='Performer suffix if present, e.g. KIT')
    iou_threshold = scfg.Value(0.5, type=float, short_alias=['i'], help=ub.paragraph(
        '''
        IOU Threshold for determining duplicates(default: 0.5)
        '''))
    just_deconflict = scfg.Value(False, isflag=True, help=ub.paragraph(
        '''
        Don't copy previous sites, just deconflict current site IDs
        with respect to previous
        '''))


def main():
    config = PseudoliveConsolidateConfig.cli(strict=True)
    print('config = {}'.format(ub.urepr(dict(config), nl=1, align=':')))
    run_pseudolive_consolidate(config)


def run_pseudolive_consolidate(config):

    from geowatch.cli.pseudolive_consolidate import pseudolive_consolidate
    if config.aws_profile is not None:
        aws_base_command =\
            ['aws', 's3', '--profile', config.aws_profile, 'cp']
    else:
        aws_base_command = ['aws', 's3', 'cp']

    local_region_path = ub.Path('/tmp/region.json')
    local_region_path = download_region(config.input_region_path,
                                        local_region_path,
                                        aws_profile=config.aws_profile,
                                        strip_nonregions=True)

    local_previous_dir = os.path.join('/tmp', 'previous_data')
    local_current_dir = os.path.join('/tmp', 'current_data')

    subprocess.run([*aws_base_command, '--recursive',
                    config.previous_consolidated_output, local_previous_dir],
                   check=True)

    # Quickly check and short-circuit if no "previous" data was copied
    # over (e.g. if there was no previous data)
    if len(os.listdir(local_previous_dir)) == 0:
        subprocess.run([*aws_base_command, '--recursive',
                        config.current_output, config.outbucket],
                       check=True)
        return

    subprocess.run([*aws_base_command, '--recursive',
                    config.current_output, local_current_dir],
                   check=True)

    local_consolidated_dir = os.path.join('/tmp', 'consolidated_out')
    pseudolive_consolidate(config.region_id,
                           local_region_path,
                           local_previous_dir,
                           local_current_dir,
                           local_consolidated_dir,
                           config.iou_threshold,
                           performer_suffix=config.performer_suffix,
                           just_deconflict=config.just_deconflict)

    subprocess.run([*aws_base_command, '--recursive',
                    local_consolidated_dir, config.outbucket],
                   check=True)


if __name__ == "__main__":
    main()
