#!/usr/bin/env python3

import datetime
import json
import os.path
import sys
import traceback

import ci_tools as tools
from ci_constants import *


def read_templates():
    templates = {}
    print("Reading bintray descriptor templates...")
    for template_filename in os.listdir(BINTRAY_TEMPLATES_PATH):
        template_filepath = os.path.join(BINTRAY_TEMPLATES_PATH, template_filename)
        with open(template_filepath) as json_data:
            templates[template_filename] = json.load(json_data)
            print("Template {name} read.".format(name=template_filename))
    return templates


def remove_extension(filename):
    name_without_extension = os.path.splitext(filename)[0]
    return name_without_extension


def get_current_date():
    date = datetime.datetime.now()
    return "{}-{}-{}".format(date.year, date.month, date.day)


def create_descriptor(name, content, current_configuration_values):
    tag = remove_extension(name)
    descriptor_name = BINTRAY_DESCRIPTOR_NAME_FORMAT.format(tag=tag)
    descriptor_folder_path = os.path.join(BINTRAY_DESCRIPTORS_PATH,
                                          descriptor_name)
    content["version"]["name"] = "{prefix}{version}".format(prefix=VERSION_PREFIX,
                                                            version=current_configuration_values["version"])
    content["version"]["vcs_tag"] = "{prefix}{version}".format(prefix=VERSION_PREFIX,
                                                               version=current_configuration_values["version"])
    content["version"]["desc"] = current_configuration_values["description"]
    content["package"]["desc"] = content["version"]["desc"]
    content["package"]["name"] = current_configuration_values["name"]
    content["package"]["website_url"] = current_configuration_values["homepage"]
    content["package"]["issue_tracker_url"] = "{website}/issues".format(website=content["package"]["website_url"])
    content["package"]["vcs_url"] = "{website}.git".format(website=content["package"]["website_url"])
    content["version"]["released"] = get_current_date()
    with open(descriptor_folder_path, "w") as descriptor:
        json.dump(content, descriptor)
        print("Created descriptor: {name}".format(name=descriptor_folder_path))


if __name__ == '__main__':
    try:
        templates = read_templates()
        current_configuration_values= tools.get_current_configuration_values(STEGANER_CONFIGURATION)
        for template_name, template_content in templates.items():
            create_descriptor(template_name, template_content, current_configuration_values)
    except:
        traceback.print_exc(file=sys.stdout)
        sys.exit(1)
    else:
        sys.exit(0)