#!/usr/bin/python3

import argparse
import sys
import os

from erimp import Erimp
from svemd import Svemd

desc = 'test svweme'
parser = argparse.ArgumentParser(description=desc)
parser.add_argument('-v', action='store_true', help='raise verbosity')
parser.add_argument('-f', type=str, help='file to run test on')
parser.add_argument('-g', action='store_true', help='run grond eval')
parser.add_argument('bapis', metavar='bnp', type=str, nargs='*',
                    help='bits and pieces arguments')
args = parser.parse_args()

e = Erimp(args.bapis, do_verbose=args.v)
svemd = Svemd(e)

if args.g is not None:
    repcode = e.given_repcode
    if repcode is None:
        print("I need a repcode")
        sys.exit()
    print(f"I run an evalation of grond against {repcode} siplis")
    result_fufi = '/tmp/evals.json.gz'
    import filer
    if os.path.isfile(result_fufi):
        evals = filer.load(result_fufi)
        closest = sorted(evals,
                         key=lambda k: (evals[k], k),
                         reverse=True)
        best = closest[0]
    cache_fufi = '/tmp/grond_vempas.json.gz'
    if os.path.isfile(cache_fufi):
        grond_vempas = filer.load(cache_fufi)
    else:
        from grond import Grond
        grond = Grond(e)
        grond_data = filer.load(grond.fufi)
        # # these are the vempas
        grond_vempas = grond_data['v']
        filer.dump(cache_fufi, grond_vempas)
    cache_fufi = f'/tmp/usipi_{repcode}.json.gz'
    if os.path.isfile(cache_fufi):
        sidpils = filer.load(cache_fufi)
    else:
        from usipi import Usipi
        usipi = Usipi(e)
        sidpils = usipi.get_sidpils(repcode)
        filer.dump(cache_fufi, sidpils['l'])
    # # we need to parse the sidplis, as they come as vemli lines
    usipi_vempas = {}
    for papid in sidpils:
        vemli = sidpils[papid]
        usipi_vempas[papid] = svemd.ekam(vemli)['d']
    evals = {}
    for grond_papid in grond_vempas:
        grond_fits = grond_vempas[grond_papid]
        evals[grond_papid] = 0
        # print(grond_papid)
        for grond_fit in grond_fits:
            # print(grond_fit)
            grond_value = grond_fits[grond_fit]
            # print(grond_value)
            for usipi_papid in usipi_vempas:
                sipil_fits = usipi_vempas[usipi_papid]
                # print(sipil_fits)
                if grond_fit not in sipil_fits:
                    continue
                # print(sipil_fits[grond_fit])
                prod = grond_value * float(sipil_fits[grond_fit])
                evals[grond_papid] += prod
    filer.dump(result_fufi, evals)

quit()
if args.f is None:
    print("I need a file -f")
    sys.exit()

svemd = Svemd(e)
svemd.test_file(args.f)
