from index_calculation import generic_index as get_index
from index_calculation import get_reference
from result_accum import result_concat as concat


def dpi_index():
    dpi_dict = concat('../../results/dpi/')
    dpi_bm_ref = get_reference('compute', 'dpi_bm')
    dpi_bm_index = get_index(dpi_dict, 'dpi_bm', dpi_bm_ref, '4  DPI result', 'DPI_benchmark(Gb/s)')

    dpi_vm_ref = get_reference('compute', 'dpi_vm')
    dpi_vm_index = get_index(dpi_dict, 'dpi_vm', dpi_vm_ref, '4  DPI result', 'DPI_benchmark(Gb/s)')

    dpi_index = (dpi_bm_index + dpi_vm_index) / 2
    dpi_dict_i = {}
    dpi_dict_i['1. Index'] = dpi_index
    dpi_dict_i['2. Results'] = dpi_dict
    return dpi_dict_i


def dhrystone_index():

    dhrystone_dict = concat('../../results/dhrystone/')
    dhrystone_single_bm_ref = get_reference('compute', 'dhrystone_bm', 'single_cpu')
    dhrystone_single_bm_index = get_index(dhrystone_dict, 'dhrystone_bm', dhrystone_single_bm_ref, '4  Dhrystone result', '2.Single CPU test', '2.Index score')

    dhrystone_multi_bm_ref = get_reference('compute', 'dhrystone_bm', 'multi_cpu')
    dhrystone_multi_bm_index = get_index(dhrystone_dict, 'dhrystone_bm', dhrystone_multi_bm_ref, '4  Dhrystone result', '3.Multi CPU test', '2.Index score')

    dhrystone_bm_index = (dhrystone_single_bm_index + dhrystone_multi_bm_index) / 2

    dhrystone_single_vm_ref = get_reference('compute', 'dhrystone_vm', 'single_cpu')
    dhrystone_single_vm_index = get_index(dhrystone_dict, 'dhrystone_vm', dhrystone_single_vm_ref, '4  Dhrystone result', '2.Single CPU test', '2.Index score')

    dhrystone_multi_vm_ref = get_reference('compute', 'dhrystone_vm', 'multi_cpu')
    dhrystone_multi_vm_index = get_index(dhrystone_dict, 'dhrystone_vm', dhrystone_multi_vm_ref, '4  Dhrystone result', '3.Multi CPU test', '2.Index score')

    dhrystone_vm_index = (dhrystone_single_vm_index + dhrystone_multi_vm_index) / 2

    dhrystone_index = (dhrystone_bm_index + dhrystone_vm_index) / 2
    dhrystone_dict_i = {}
    dhrystone_dict_i['1. Index'] = dhrystone_index
    dhrystone_dict_i['2. Results'] = dhrystone_dict
    return dhrystone_dict_i


def whetstone_index():

    whetstone_dict = concat('../../results/whetstone/')
    whetstone_single_bm_ref = get_reference('compute', 'whetstone_bm', 'single_cpu')
    whetstone_single_bm_index = get_index(whetstone_dict, 'whetstone_bm', whetstone_single_bm_ref, '4  Whetstone result', '2.Single CPU test', '2.Index score')

    whetstone_multi_bm_ref = get_reference('compute', 'whetstone_bm', 'multi_cpu')
    whetstone_multi_bm_index = get_index(whetstone_dict, 'whetstone_bm', whetstone_multi_bm_ref, '4  Whetstone result', '3.Multi CPU test', '2.Index score')

    whetstone_bm_index = (whetstone_single_bm_index + whetstone_multi_bm_index) / 2

    whetstone_single_vm_ref = get_reference('compute', 'whetstone_vm', 'single_cpu')
    whetstone_single_vm_index = get_index(whetstone_dict, 'whetstone_vm', whetstone_single_vm_ref, '4  Whetstone result', '2.Single CPU test', '2.Index score')

    whetstone_multi_vm_ref = get_reference('compute', 'whetstone_vm', 'multi_cpu')
    whetstone_multi_vm_index = get_index(whetstone_dict, 'whetstone_vm', whetstone_multi_vm_ref, '4  Whetstone result', '3.Multi CPU test', '2.Index score')

    whetstone_vm_index = (whetstone_single_vm_index + whetstone_multi_vm_index) / 2

    whetstone_index = (whetstone_bm_index + whetstone_vm_index) / 2
    whetstone_dict_i = {}
    whetstone_dict_i['1. Index'] = whetstone_index
    whetstone_dict_i['2. Results'] = whetstone_dict
    return whetstone_dict_i


def ramspeed_index():

    ramspeed_dict = concat('../../results/ramspeed/')
    ramspeed_int_bm_ref = get_reference('compute', 'ramspeed_bm', 'INTmem', 'Average (MB/s)')
    ramspeed_int_bm_index = get_index(ramspeed_dict, 'ramspeed_bm', ramspeed_int_bm_ref, '4  RamSpeed result', '1. INTmem bandwidth', '5. Average (MB/s)')

    ramspeed_float_bm_ref = get_reference('compute', 'ramspeed_bm', 'FLOATmem', 'Average (MB/s)')
    ramspeed_float_bm_index = get_index(ramspeed_dict, 'ramspeed_bm', ramspeed_float_bm_ref, '4  RamSpeed result', '2. FLOATmem bandwidth', '5. Average (MB/s)')

    ramspeed_bm_index = (ramspeed_int_bm_index + ramspeed_float_bm_index) / 2

    ramspeed_int_vm_ref = get_reference('compute', 'ramspeed_vm', 'INTmem', 'Average (MB/s)')
    ramspeed_int_vm_index = get_index(ramspeed_dict, 'ramspeed_vm', ramspeed_int_vm_ref, '4  RamSpeed result', '1. INTmem bandwidth', '5. Average (MB/s)')

    ramspeed_float_vm_ref = get_reference('compute', 'ramspeed_vm', 'FLOATmem', 'Average (MB/s)')
    ramspeed_float_vm_index = get_index(ramspeed_dict, 'ramspeed_vm', ramspeed_float_vm_ref, '4  RamSpeed result', '2. FLOATmem bandwidth', '5. Average (MB/s)')

    ramspeed_vm_index = (ramspeed_int_vm_index + ramspeed_float_vm_index) / 2

    ramspeed_index = (ramspeed_vm_index + ramspeed_bm_index) / 2

    ramspeed_dict_i = {}
    ramspeed_dict_i['1. Index'] = ramspeed_index
    ramspeed_dict_i['2. Results'] = ramspeed_dict
    return ramspeed_dict_i


def ssl_index():

    ssl_dict = concat('../../results/ssl/')

    ssl_RSA512b_bm_ref = get_reference('compute', 'ssl_bm', 'RSA', '512b')
    ssl_RSA1024b_bm_ref = get_reference('compute', 'ssl_bm', 'RSA', '1024b')
    ssl_RSA2048b_bm_ref = get_reference('compute', 'ssl_bm', 'RSA', '2048b')
    ssl_RSA4096b_bm_ref = get_reference('compute', 'ssl_bm', 'RSA', '4096b')

    ssl_AES16B_bm_ref = get_reference('compute', 'ssl_bm', 'AES', '16B')
    ssl_AES64B_bm_ref = get_reference('compute', 'ssl_bm', 'AES', '64B')
    ssl_AES256B_bm_ref = get_reference('compute', 'ssl_bm', 'AES', '256B')
    ssl_AES1024B_bm_ref = get_reference('compute', 'ssl_bm', 'AES', '1024B')
    ssl_AES8192B_bm_ref = get_reference('compute', 'ssl_bm', 'AES', '8192B')

    ssl_RSA512b_bm_index = get_index(ssl_dict, "ssl_bm", ssl_RSA512b_bm_ref, '4  SSL result', '2. RSA signatures', '1. 512 bits (sign/s)')
    ssl_RSA1024b_bm_index = get_index(ssl_dict, "ssl_bm", ssl_RSA1024b_bm_ref, '4  SSL result', '2. RSA signatures', '2. 1024 bits (sign/s)')
    ssl_RSA2048b_bm_index = get_index(ssl_dict, "ssl_bm", ssl_RSA2048b_bm_ref, '4  SSL result', '2. RSA signatures', '3. 2048 bits (sign/s)')
    ssl_RSA4096b_bm_index = get_index(ssl_dict, "ssl_bm", ssl_RSA4096b_bm_ref, '4  SSL result', '2. RSA signatures', '4. 4096 bits (sign/s)')
    ssl_RSA_bm_index = (ssl_RSA512b_bm_index + ssl_RSA1024b_bm_index + ssl_RSA2048b_bm_index + ssl_RSA4096b_bm_index) / 4

    ssl_AES16B_bm_index = get_index(ssl_dict, "ssl_bm", ssl_AES16B_bm_ref, '4  SSL result', '3. AES-128-cbc throughput', '1. 16 Bytes block (B/sec)')
    ssl_AES64B_bm_index = get_index(ssl_dict, "ssl_bm", ssl_AES64B_bm_ref, '4  SSL result', '3. AES-128-cbc throughput', '2. 64 Bytes block (B/sec)')
    ssl_AES256B_bm_index = get_index(ssl_dict, "ssl_bm", ssl_AES256B_bm_ref, '4  SSL result', '3. AES-128-cbc throughput', '3. 256 Bytes block (B/sec)')
    ssl_AES1024B_bm_index = get_index(ssl_dict, "ssl_bm", ssl_AES1024B_bm_ref, '4  SSL result', '3. AES-128-cbc throughput', '4. 1024 Bytes block (B/sec)')
    ssl_AES8192B_bm_index = get_index(ssl_dict, "ssl_bm", ssl_AES8192B_bm_ref, '4  SSL result', '3. AES-128-cbc throughput', '5. 8192 Bytes block (B/sec)')
    ssl_AES_bm_index = (ssl_AES16B_bm_index + ssl_AES64B_bm_index + ssl_AES256B_bm_index + ssl_AES1024B_bm_index + ssl_AES8192B_bm_index) / 5

    ssl_bm_index = (ssl_RSA_bm_index + ssl_AES_bm_index) / 2

    ssl_RSA512b_vm_ref = get_reference('compute', 'ssl_vm', 'RSA', '512b')
    ssl_RSA1024b_vm_ref = get_reference('compute', 'ssl_vm', 'RSA', '1024b')
    ssl_RSA2048b_vm_ref = get_reference('compute', 'ssl_vm', 'RSA', '2048b')
    ssl_RSA4096b_vm_ref = get_reference('compute', 'ssl_vm', 'RSA', '4096b')

    ssl_AES16B_vm_ref = get_reference('compute', 'ssl_vm', 'AES', '16B')
    ssl_AES64B_vm_ref = get_reference('compute', 'ssl_vm', 'AES', '64B')
    ssl_AES256B_vm_ref = get_reference('compute', 'ssl_vm', 'AES', '256B')
    ssl_AES1024B_vm_ref = get_reference('compute', 'ssl_vm', 'AES', '1024B')
    ssl_AES8192B_vm_ref = get_reference('compute', 'ssl_vm', 'AES', '8192B')

    ssl_RSA512b_vm_index = get_index(ssl_dict, "ssl_vm", ssl_RSA512b_vm_ref, '4  SSL result', '2. RSA signatures', '1. 512 bits (sign/s)')
    ssl_RSA1024b_vm_index = get_index(ssl_dict, "ssl_vm", ssl_RSA1024b_vm_ref, '4  SSL result', '2. RSA signatures', '2. 1024 bits (sign/s)')
    ssl_RSA2048b_vm_index = get_index(ssl_dict, "ssl_vm", ssl_RSA2048b_vm_ref, '4  SSL result', '2. RSA signatures', '3. 2048 bits (sign/s)')
    ssl_RSA4096b_vm_index = get_index(ssl_dict, "ssl_vm", ssl_RSA4096b_vm_ref, '4  SSL result', '2. RSA signatures', '4. 4096 bits (sign/s)')
    ssl_RSA_vm_index = (ssl_RSA512b_vm_index + ssl_RSA1024b_vm_index + ssl_RSA2048b_vm_index + ssl_RSA4096b_vm_index) / 4

    ssl_AES16B_vm_index = get_index(ssl_dict, "ssl_vm", ssl_AES16B_vm_ref, '4  SSL result', '3. AES-128-cbc throughput', '1. 16 Bytes block (B/sec)')
    ssl_AES64B_vm_index = get_index(ssl_dict, "ssl_vm", ssl_AES64B_vm_ref, '4  SSL result', '3. AES-128-cbc throughput', '2. 64 Bytes block (B/sec)')
    ssl_AES256B_vm_index = get_index(ssl_dict, "ssl_vm", ssl_AES256B_vm_ref, '4  SSL result', '3. AES-128-cbc throughput', '3. 256 Bytes block (B/sec)')
    ssl_AES1024B_vm_index = get_index(ssl_dict, "ssl_vm", ssl_AES1024B_vm_ref, '4  SSL result', '3. AES-128-cbc throughput', '4. 1024 Bytes block (B/sec)')
    ssl_AES8192B_vm_index = get_index(ssl_dict, "ssl_vm", ssl_AES8192B_vm_ref, '4  SSL result', '3. AES-128-cbc throughput', '5. 8192 Bytes block (B/sec)')
    ssl_AES_vm_index = (ssl_AES16B_vm_index + ssl_AES64B_vm_index + ssl_AES256B_vm_index + ssl_AES1024B_vm_index + ssl_AES8192B_vm_index) / 5

    ssl_vm_index = (ssl_RSA_vm_index + ssl_AES_vm_index) / 2

    ssl_index = (ssl_bm_index + ssl_vm_index) / 2

    ssl_dict_i = {}
    ssl_dict_i['1. Index'] = ssl_index
    ssl_dict_i['2. Results'] = ssl_dict
    return ssl_dict_i