#!/usr/bin/env python3
import argparse
import boto3
import os
import sys

S3_DEFAULT_BUCKET = 'archives.webkit.org'
S3_EWS_BUCKET = 'ews-archives.webkit.org'
S3_MINIFIED_BUCKET = 'minified-archives.webkit.org'
S3_REGION_PREFIX = 'https://s3-us-west-2.amazonaws.com'

def uploadToS3(archive_path, bucket, identifier, revision):
    print('Transferring {} to S3...'.format(archive_path))
    key = '/'.join([identifier, revision + '.zip'])
    print('\tS3 Bucket: {}\n\tS3 Key: {}'.format(bucket, key))
    s3 = boto3.client('s3')
    s3.upload_file(archive_path, bucket, key)
    print('\tS3 URL: {}/{}/{}'.format(S3_REGION_PREFIX, bucket, key))

def archiveExists(archive):
    if archive:
        if os.path.exists(archive):
            return True
        else:
            print('WARNING: Archive does not exist: {}'.format(archive))
            return False

def main():
    parser = argparse.ArgumentParser(add_help=True)

    group = parser.add_mutually_exclusive_group(required=True)
    group.add_argument('--revision', action="store", help='Revision number or patch_id for the built archive')
    group.add_argument('--patch_id', action="store", help='patch_id of the patch')

    parser.add_argument('--identifier', action="store", required=True, help='S3 destination identifier, in the form of fullPlatform-architecture-configuration. [mac-mojave-x86_64-release]')
    parser.add_argument('--archive', action="store", required=True, help='Path to the full size archive. [path/to/123456.zip]')
    args = parser.parse_args()

    parentdir, filename = os.path.split(str(args.archive))
    minifiedArchive = os.path.join(parentdir, 'minified-' + filename)

    s3_bucket = S3_DEFAULT_BUCKET
    if args.patch_id:
        s3_bucket = S3_EWS_BUCKET

    if archiveExists(args.archive):
        uploadToS3(args.archive, s3_bucket, args.identifier, args.revision or args.patch_id)
    if not args.patch_id and archiveExists(minifiedArchive):
        uploadToS3(minifiedArchive, S3_MINIFIED_BUCKET, args.identifier, args.revision)

if __name__ == "__main__":
    main()
