#!python
from __future__ import print_function
import os
import boto3
import argparse
import fnmatch
import sys
import time
import shutil

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument("dock", help="Name of dock to destroy")
    args = parser.parse_args()

    ip = None
    provisioned_product_id = None

    cfg_dir = os.path.join(os.path.expanduser("~"), ".docker")
    for root, dirs, files in os.walk(cfg_dir):
        for file in files:
            if fnmatch.fnmatch(file, 'connection_config.txt'):
                vars = {}
                with open(os.path.join(root, file)) as f:
                    for line in f:
                        if line.startswith('#'):
                            continue
                        key, value = line.strip().split('=', 1)
                        vars[key] = value
                if vars['DOCK_MONIKER'] == args.dock or vars['DOCK_IP'] == args.dock:
                    ip = vars['DOCK_IP']
                    provisioned_product_id = vars['DOCK_PROVISIONED_PRODUCT']

    client = boto3.client('servicecatalog')
    response = client.terminate_provisioned_product(ProvisionedProductId=provisioned_product_id)

    record_id = response['RecordDetail']['RecordId']
    errors = None
    sys.stdout.write('waiting for terminate to complete')
    while True:
        sys.stdout.write('.')
        sys.stdout.flush()
        time.sleep(2)
        response = client.describe_record(Id=record_id)
        if response['RecordDetail']['Status'] == 'SUCCEEDED':
            shutil.rmtree(os.path.join(cfg_dir, ip), ignore_errors=True)
            break
        elif response['RecordDetail']['Status'] in ['IN_PROGRESS_IN_ERROR', 'FAILED']:
            sys.stdout.write('\n')
            sys.stdout.flush()
            errors = response['RecordDetail']['RecordErrors']
            break
    sys.stdout.write('\n')
    sys.stdout.flush()

    if errors:
        print(errors)