#!/usr/bin/env python
import sys
import os
import re
import commands
import subprocess
import argparse
import inspect    
import urllib2
import json

def fail(message):
    file_name = __file__
    current_line_no = inspect.stack()[1][2]
    current_function_name = inspect.stack()[1][3]
    print 'Failure in:', file_name, current_line_no, current_function_name
    print message
    sys.exit(1)


def execute_command(command):
    try:
        print ' '.join(command)
        output = subprocess.check_output(command)
        if output:
            print output
    except subprocess.CalledProcessError as e:
        print e.output
        sys.exit(1)

def add_field(curl_command, form_key, form_value):
    curl_command.append('-F')
    curl_command.append("%s=%s" % (form_key, form_value))

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Precommit cleanup script.')
    parser.add_argument('--file', required=True, help='used for starting a new version.')

    args = parser.parse_args()
    
    params_response = urllib2.urlopen("https://debuglogs.org/").read()
    
    params = json.loads(params_response)
    
    upload_url = params['url']
    upload_fields = params['fields']

    upload_key = upload_fields.pop('key')
    upload_key = upload_key + os.path.splitext(args.file)[1]
    
    download_url = 'https://debuglogs.org/' + upload_key
    print 'download_url:', download_url
    
    curl_command = ['curl', '-v', '-i', '-X', 'POST']

    # key must appear before other fields
    add_field(curl_command, 'key', upload_key)
    for field_name in upload_fields:
        add_field(curl_command, field_name, upload_fields[field_name])

    add_field(curl_command, "content-type", "application/octet-stream")
 
    curl_command.append('-F')
    curl_command.append("file=@%s" % (args.file,))
    curl_command.append(upload_url)
    
    print ' '.join(curl_command)

    print 'Running...'
    execute_command(curl_command)

    print 'download_url:', download_url