#!/usr/bin/python3

import argparse

import docing
import filer
import os
import re
import sys

from erimp import Erimp
from otria import Otria
from trans import Trans
from aplog import Aplog
from doker import Doker

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']}


weblog_fudi = e.conf['weblog_dir']

aplog = Aplog(e)
# folder = Folder(e)
otria = Otria(e)
trans = Trans(e)
doker = Doker(e)

add_otria = otria.to_fraction()

my_name = os.path.basename(__file__)

# def shoti_from_logdate(logdate):

do_verbose = True

## date
data = {}
fufis = e.folda.by_dates(weblog_fudi)
if fufis is None:
    print(f"I have no files in {weblog_fudi}", file=sys.stderr)
    sys.exit(1)
for webdate in fufis:
    if webdate < aplog.min_issuedate:
        continue
    txt = filer.sread(fufis[webdate])
    for line in txt.split("\n"):
        aplog.deal_with_line(line)
data = aplog.data
stats = {}
dates = []
totals = {}
for repcode in data:
    stats[repcode] = {}
    for issuedate in data[repcode]:
        if issuedate not in dates:
            dates.append(issuedate)
        if issuedate not in dates:
            totals[issuedate] = 0
        stats[repcode][issuedate] = 0
        for ip in data[repcode][issuedate]:
            stats[repcode][issuedate] += 1
            if issuedate not in totals:
                totals[issuedate] = 0
            totals[issuedate] += 1

root_ele = Element(QName(e.ns['ernad'], 'poplog'),
                   nsmap=e.ns)
dates.sort()
dates.reverse()
grand_total = 0
for date in dates:
    date_ele = SubElement(root_ele, QName(e.ns['ernad'], 'date'),
                          nsmap=e.ns)
    # date_ele.text = str(date).replace('-','–')
    date_ele.text = str(date)
    date_ele.attrib['total'] = str(totals[date])
    grand_total += totals[date]

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]:
    for issuedate in dates:
        iss_ele = SubElement(rep_ele, QName(e.ns['ernad'], 'issue'),
                             nsmap=e.ns)
        iss_ele.attrib['date'] = issuedate
        if issuedate in stats[repcode]:
            iss_ele.attrib['value'] = str(stats[repcode][issuedate])
            total += stats[repcode][issuedate]
        if repcode in add_otria:
            total += add_otria[repcode]
        else:
            if not e.is_testing():
                print(f"popular: no otria for {repcode}", file=sys.stderr)
    rep_ele.attrib['total'] = str(total)
root_ele.attrib['total'] = str(grand_total)
#print(docing.show(root_ele))

out_fufi = e.conf['web_dir'] + '/opt/access_stats.html'
data_doc = doker.inject_update(root_ele)
if args.v:
    print(docing.show(data_doc.getroot()))
out_doc = trans.get_result(my_name, data_doc)
#print(docing.show(out_doc))
filer.install_xml(out_doc.getroot(), out_fufi)

quit()
