#!/usr/bin/python3

import argparse
import glob
import os
import sys

from lxml import etree

# import filer
from erimp import Erimp

desc = 'collects filename-based identifiers for schema'
parser = argparse.ArgumentParser(description=desc)
parser.add_argument('-r', type=str, help='add report')
parser.add_argument('-e', type=str, help='add editor')
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)

do_verbose = args.v

loc_types = {'/reports/available': 'repcodes', '/editors': 'stafids'}
refids = ['ref', 'id']
for loc in loc_types:
    fudi = e.dirs['etc'] + loc
    filids_ele = etree.Element(etree.QName(e.ns['ernad'], 'filids'))
    loc_type = loc_types[loc]
    filids_ele.attrib['type'] = loc_types[loc]
    for fufi in glob.glob(fudi + '/*.amf.xml'):
        bana = os.path.basename(fufi)
        filid = bana[:-8]
        filid_ele = etree.SubElement(filids_ele,
                                     etree.QName(e.ns['ernad'], 'filid'))
        filid_ele.text = filid
    # # add additional identifiers useful at report creation
    if loc_type == 'reports' and args.r is not None:
        filid_ele = etree.SubElement(filids_ele,
                                     etree.QName(e.ns['ernad'], 'filid'))
        if do_verbose:
            print(f"I add {args.r}")
        filid_ele.text = args.r
    # # not sure why I need these two editors and stafids
    if loc_type in ('editors', 'stafids') and args.e is not None:
        filid_ele = etree.SubElement(filids_ele,
                                     etree.QName(e.ns['ernad'], 'filid'))
        if do_verbose:
            print(f"I add {args.e}")
        filid_ele.text = args.e
    for kind in refids:
        filids_ele.attrib['output'] = kind
        out_fufi = e.dirs['opski'] + '/' + loc_type + '_' + kind
        out_fufi += '.rng.xml'
        # filer.install_xml(filids_ele, '/tmp/' + kind + '.xml')
        if do_verbose:
            print(f"I write {out_fufi}")
        e.t.ingest_to_fufi('filids', etree.ElementTree(filids_ele), out_fufi)
