#!/usr/bin/env python
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()
