import sys
import os

import argparse

import string
import random

import json

def app(argv):
    options = {}
    parser = argparse.ArgumentParser(add_help=True)
    parser.add_argument("-t", '--template', help="Template to split", required=True)

    args = parser.parse_args()

    template = args.template

    #++ not about to risk a conflict with existing files
    random_target = ''.join(random.choice(string.ascii_lowercase + string.digits) for _ in range(8))

    base_folder = os.path.join(os.getcwd(), template)

    with open(os.path.join(base_folder, 'azuredeploy.json')) as f:
        content = f.read()
    
    data = json.loads(content)

    def ensure_path(path):
        if not os.path.exists(path):
            os.mkdir(path)

    target_folder = os.path.join(base_folder, random_target)
    ensure_path(target_folder)

    template_folder = os.path.join(target_folder, 'template')
    ensure_path(template_folder)

    variables = data['variables']
    with open(os.path.join(template_folder, 'variables.json'), 'w') as f:
        f.write(json.dumps(variables, indent=4, sort_keys=True))

    try:
        parameters = data['parameters']
        with open(os.path.join(template_folder, 'parameters.json'), 'w') as f:
            f.write(json.dumps(parameters, indent=4, sort_keys=True))
    except:
        pass

    try:
        outputs = data['outputs']
        with open(os.path.join(template_folder, 'outputs.json'), 'w') as f:
            f.write(json.dumps(outputs, indent=4, sort_keys=True))
    except:
        pass
        
    counters = { }

    resource_folder = os.path.join(template_folder, 'resources')
    if not os.path.exists(resource_folder):
        os.mkdir(resource_folder)

    resources = data['resources']
    for resource in resources:
        type = resource['type']
        slash_index = type.index('/')
        resource_provider = type[0:slash_index].split('.')[1].lower()
        resource_type = type[slash_index + 1:]

        folder = os.path.join(resource_folder, resource_provider)
        ensure_path(folder)

        net_resource_type = resource_type
        while '/' in resource_type:
            slash_index = resource_type.index('/')
            
            parent_resource_type = resource_type[0:slash_index]
            resource_type = resource_type[slash_index + 1:]

            net_resource_type = resource_type
            folder = os.path.join(folder, parent_resource_type)
            ensure_path(folder)

        try: 
            counter = counters[type]
        except:
            counter = 0
        counter = counter + 1
        counters[type] = counter

        folder = os.path.join(folder, net_resource_type)
        ensure_path(folder)

        resource_name = "{}{}".format(net_resource_type, counter)
        resource_path = os.path.join(folder, resource_name)

        print(resource_path)

        with open('{}.json'.format(resource_path), 'w') as f:
            f.write(json.dumps(resource, indent=4, sort_keys=True))

if __name__ == '__main__':
    app(sys.argv[1:])