#!/usr/bin/python3

import argparse

import docing
import filer
import re
import sys

from folder import Folder

from erimp import Erimp
from otria import Otria
#from lxml import etree
#from lxml.etree import Element, SubElement, ElementTree, QName, parse

# from dateutil.parser import parse

desc = 'list popular reports'
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)

namespaces = {None: e.ns['ernad']}
xpspaces = {'a': e.ns['amf'],
            'e': e.ns['ernad']}

bremspi = int(e.conf['bremspi'])
weblog_fudi = e.conf['weblog_dir']
folder = Folder(e)
issuedates = e.issuedates[0:bremspi]
min_issuedate = issuedates[len(issuedates)-1]

re_hit = re.compile(r'(bims-[^/]{6})/(\d{4}-\d{2}-\d{2})')

otria = Otria(e)
add_otria = otria.to_fraction()

## date
data = {}
fufis = folder.by_dates(weblog_fudi)
for webdate in fufis:
    if webdate < min_issuedate:
        continue
    txt = filer.sread(fufis[webdate])
    for line in txt.split("\n"):
        match = re_hit.search(line)
        if match is None:
            continue
        repcode = match.groups(1)[0]
        issuedate = match.groups(1)[1]
        if issuedate not in issuedates:
            continue
        ip = line.split()[0]
        date = line.split('[')[1]
        date = date.split(']')[0]
        date = parse(date[:11] + " " + date[12:])
        if repcode not in data:
            data[repcode] = {}
        if issuedate not in data[repcode]:
            data[repcode][issuedate] = {}
        ## count each ip only once
        if ip not in data[repcode][issuedate]:
            data[repcode][issuedate][ip] = date.__str__()
stats = {}
for repcode in data:
    stats[repcode] = {}
    for issuedate in data[repcode]:
        stats[repcode][issuedate] = 0
        for ip in data[repcode][issuedate]:
            stats[repcode][issuedate] += 1

root_ele = Element(QName(e.ns['ernad'], 'poplog'),
                   nsmap=e.ns)
for repcode in stats:
    rep_ele = SubElement(root_ele, QName(e.ns['ernad'], 'report'),
                         nsmap=e.ns)
    rep_ele.attrib['repcode'] = repcode
    total = 0
    for issuedate in stats[repcode]:
        rep_ele.attrib['d' + issuedate] = str(stats[repcode][issuedate])
        total += stats[repcode][issuedate]
    ##
    if repcode in add_otria:
        total += add_otria[repcode]
    else:
        print(f"popular: no otria for {repcode}", file=sys.stderr)
    rep_ele.attrib['total'] = str(total)

print(docing.show(root_ele))
quit()
