#!/usr/bin/python3

import argparse
import os
import sys


from erimp import Erimp
from svemd import Svemd
from inish import Inish
from riffer import Riffer

import filer

desc = 'compare vemli to alfit, a debugging tool'
parser = argparse.ArgumentParser(description=desc)
parser.add_argument('-v', action='store_true', help='raise verbosity')
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)

if e.given_fufi is None:
    print("I don't see your fufi")
    sys.exit()

vemli_fufi = e.given_fufi

print(f"velal runs {vemli_fufi}")

# # get fitli from that fufi
vemli_bana = os.path.basename(vemli_fufi)

# # get from json or from lines?
line_parse = False
if vemli_bana.endswith('.train') or vemli_bana.endswith('.train.bug'):
    line_parse = True

# print(vemli_bana)
fitli = None
# # bana starts with issuedate
if vemli_bana[10] == '_':
    after_date = vemli_bana[11:]
    parts = after_date.partition('.')
    fitli = parts[0]
elif line_parse:
    parts = vemli_bana.partition('.')
    fitli = parts[0]
else:
    print(f"I can't parse {vemli_fufi}")
    exit()
glob_string = '*' + fitli + '*ranfi*'
# print(glob_string)
ranfi_fufi = e.folda.last_by_mtime(e.dirs['fitli'], search=glob_string)
if ranfi_fufi is None:
    print(f"I can't get a ranfi for {fitli}")
    sys.exit()

svemd = Svemd(e)
# # bana starts with issuedate
if vemli_bana[10] == '_':
    data = svemd.get_data(vemli_fufi)
elif vemli_bana.endswith('.train') or vemli_bana.endswith('.train.bug'):
    data = {}
    lines = filer.read_as_lines(vemli_fufi)
    for line in lines:
        lisve = svemd.ekam(line)
        ## skip if the papers has no issuedate (external sipil)
        if lisve['i'] is None:
            continue
        ## skip if this is an
        data[lisve['p']] = lisve

papids = list(data.keys())
papid = papids[0]
if line_parse:
    parsed = data[papid]
else:
    parsed = svemd.ekam(data[papid])
vemli_fitnus = list(parsed['d'])

issuedate = None
if 'i' in parsed:
    issuedate = parsed['i']
else:
    # # this will not work in NEP, as there is no inish
    # # as yet
    inish = Inish(e)
    issuedate = inish.lookup_one(papid)

alfit_fufi = e.dirs['alfit'] + '/' + issuedate + '.json.gz'
if not os.path.isfile(alfit_fufi):
    riffer = Riffer(e)
    repcode = riffer.repcode(vemli_fufi)
    alfit_fufi = e.report[repcode].dirs['sipil'] + '/alfit.json.gz'
if not os.path.isfile(alfit_fufi):
    print(f"I can't see {alfit_fufi} for {papid}")
    sys.exit()

ranfis = {}
ranfi_data = filer.load(ranfi_fufi)
ranfi_fits = list(ranfi_data.keys())
for vemli_fitnu in vemli_fitnus:
    # print(ranfi_fits[int(vemli_fitnu) - 1])
    ranfis[ranfi_fits[int(vemli_fitnu) - 1]] = 1

# alfits = json.

alfits = filer.load(alfit_fufi)
if papid not in alfits:
    print(f"I can't see the alfits for {papid}")
    sys.exit()

alfits = alfits[papid]
# print(alfits)

for alfit in alfits:
    if alfit not in ranfi_fits:
        print(f"alfit '{alfit}' not in train")

for ranfi in ranfis:
    if ranfi not in alfits:
        print(f"ranfi '{ranfi}' not in alfits")

sumup = str(len(list(alfits.keys()))) + ' alfits '
sumup += str(len(list(ranfis.keys()))) + ' ranfits '

print(sumup)
