#!/usr/bin/env python
from __future__ import print_function

from optparse import OptionParser
import os
import shelve

from citools.data import TestReport
from citools.jenkins.report import Report


def merge_suites(suites_1, suites_2):
    suites_by_name_1 = create_dict_by_name(suites_1)
    print(str(len(suites_by_name_1)) + " " + str(suites_by_name_1.keys()))
    suites_by_name_2 = create_dict_by_name(suites_2)
    print(str(len(suites_by_name_2)) + " " + str(suites_by_name_2.keys()))
    print("update: " + str(suites_by_name_1.update(suites_by_name_2)))
    print(str(len(suites_by_name_1)) + " " + str(suites_by_name_1.keys()))
    print()
    return suites_by_name_1.values()


def create_dict_by_name(suites_1):
    return dict((suite.name, suite) for suite in suites_1)


if __name__ == '__main__':

    parser = OptionParser()

    (options, args) = parser.parse_args()

    report = Report()

    jenkins_url = os.environ['JENKINS_URL']

    if jenkins_url is None:
        raise RuntimeError("Jenkins Url should be set.")

    sources = args[:-1]
    target = args[-1]

    suites_by_module = {}

    source_jobs = []

    for source in sources:
        db_file_name = source + ".db"
        if os.path.exists(db_file_name):
            db = shelve.open(db_file_name)

            source_report = db.get('report', None)
            print("source " + source + " " + str(source_report))

            for module, suites in source_report.suites_by_module.iteritems():
                suites_by_module[module] = merge_suites(suites_by_module[module],
                                                        suites) if module in suites_by_module else suites

            db.close()
            source_jobs.append({'name': source, 'build_number': source_report.build_number})

    target_report = TestReport(target, suites_by_module, 0, False)
    db = shelve.open(target + ".db")

    db['report'] = target_report
    db['source_jobs'] = source_jobs

    db.close()

    print("target " + target + " " + str(target_report))
    print("source jobs")
    for source_job in source_jobs:
        print("  " + source_job['name'] + " #" + str(source_job['build_number']))
