#!/usr/bin/env -S python3 -u

import sys
import argparse
import subprocess
import json
from pathlib import Path


def callNotaryTool(cmd):
    fullCmd = ['xcrun', 'notarytool'] + cmd + ['-f', 'json']
    output = subprocess.run(fullCmd, check=True, stdout=subprocess.PIPE).stdout.decode('utf-8')
    print(output)
    return json.loads(output)


def notarize(package, username, team, password):
    print("Starting...")
    workDir = package.parent
    print(f"Uploading to Apple to notarize")
    submission = callNotaryTool(['submit', str(package),
                                 '--apple-id', username, '--team-id', team, '--password', password, 
                                 '--wait'])
    success = (submission['status'] == 'Accepted')
    submissionId = submission['id']
    print("Downloading log file")
    callNotaryTool(['log', submissionId, 
                    '--apple-id', username, '--team-id', team, '--password', password, 
                    workDir/'notarization-log.json'])
    log = (workDir/'notarization-log.json').read_text()
    print(f"Notarization log:\n{log}")
    if not success:    
        sys.exit(1) 
    print("Stapling")
    subprocess.check_call(['xcrun', 'stapler', 'staple', f"{package}"])
    print("Done")

def main(): 
    parser = argparse.ArgumentParser(description='''
Notarize Mac software
''')
    parser.add_argument(dest='package', 
                        help=f'Package to notarize')
    parser.add_argument('--user', dest='username', type=str, required = True,
                        help='Username')
    parser.add_argument('--password', dest='password', type=str, required = True,
                        help='Application password configured for your Apple ID (not your Apple ID password)')
    parser.add_argument('--team', dest='team', type=str, required = True,
                        help='Team ID')
    args = parser.parse_args()
    notarize(Path(args.package), args.username, args.team, args.password)

if __name__ == "__main__":
    main()