#! /usr/bin/env python3

import argparse

from nexrad.db      import Database
from nexrad.s3      import S3Bucket
from nexrad.storm   import StormReport
from nexrad.archive import Archive

parser = argparse.ArgumentParser(
    description = 'Archive NEXRAD Level II data from Amazon S3'
)

parser.add_argument('--quiet',   action='store_true', help='Suppress output')
parser.add_argument('--dry-run', action='store_true', help='Do not actually archive data')
parser.add_argument('db',                             help='SQLite3 NEXRAD radar site database')
parser.add_argument('csv-report-details', nargs='+',  help='Compressed storm report details CSV file')
parser.add_argument('archive-dir',                    help='Target archive directory')

args = parser.parse_args()

db      = Database.connect(args.db)
bucket  = S3Bucket()
archive = Archive(getattr(args, 'archive-dir'), bucket)

i = 0

for path in getattr(args, 'csv-report-details'):
    for report in StormReport.each_from_csv_file(path):
        i += 1

        if not report.is_radar_significant():
            continue

        radars = report.nearby_radars(db)

        for key in bucket.each_matching_key(radars, report.timestamp_start, report.timestamp_end):
            if archive.is_downloaded(key):
                if not args.quiet:
                    print(f"{key} report {i} Already archived")
            else:
                if not args.quiet:
                    if args.dry_run:
                        print(f"{key} report {i} Would archive")
                    else:
                        print(f"{key} report {i} Archiving")

                if not args.dry_run:
                    archive.download(key)