#!/usr/bin/python3

import argparse
import datetime
import glob
import os
import sys

from erimp import Erimp

desc = 'scan for reports to be close'
parser = argparse.ArgumentParser(description=desc)
parser.add_argument('-v', action='store_true', help='raise verbosity')
parser.add_argument('-t', type=str)
parser.add_argument('-g', type=int)
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 'death_by_issuegap' not in e.conf:
    print("I don't have a death_by_issuegap configured for " + e.impna + '.')
    quit()

issuegap = args.g
if issuegap is None:
    print("I need -g issuegap (int)")
    sys.exit()
target_fudi = args.t
if target_fudi is None:
    print("I need -t target fudi (int)")
    sys.exit()
if not os.path.isdir(target_fudi):
    print(f"I don't see {target_fudi}")
    sys.exit()


do_verbose = args.v
today = datetime.datetime.today()
# # death by issuegap is in issues, convert to days
last_action_gap = 7 * issuegap

avail_fudi = e.dirs['etc'] + '/reports/available'

## clear old symlinks
for fuli in glob.glob(target_fudi + '/*'):
    if os.path.islink(fuli):
        os.remove(fuli)


issues_dir = e.dirs['issues']
for repcode in e.live:
    sent_dir = e.report[repcode].dirs['sent']
    ##
    last_sent_fufi = e.d.very_last(sent_dir)
    if last_sent_fufi is None:
        if do_verbose:
            print(f"{repcode} has not sent no last sent date")
        continue
    ## fixMe. This should be the time on the rif name
    last_sent_time = datetime.datetime.fromtimestamp(
        os.path.getmtime(last_sent_fufi))
    last_sent_duration = today - last_sent_time
    # print(str(last_sent_duration.days) + ' ' + str(last_action_gap))
    if last_sent_duration.days > last_action_gap:
        message = f"{repcode}: {last_sent_duration}"
        message += f" is greater then {last_action_gap}"
        print(message)
        continue
    source_dir = e.report[repcode].dirs['source']
    # # never brought out an issue
    if len(e.d.dates(sent_dir)) == 0:
        continue
    issues_gap = e.d.count_gap_issues(sent_dir)
    if issues_gap is None or issues_gap > issuegap:
        print(f"{repcode} has isses gap {issues_gap}, inactive")
        continue
    print(f"{repcode} {issues_gap}")
    target_fufi = target_fudi + '/' + repcode + '.amf.xml'
    print(avail_fudi + '/' + repcode + '.amf.xml')
    print(target_fufi)
    if os.path.islink(target_fufi):
        os.remove(target_fufi)
    print(os.path.relpath(avail_fudi + '/' + repcode + '.amf.xml',
                          target_fudi))
    os.symlink(os.path.relpath(avail_fudi + '/' + repcode + '.amf.xml',
                               target_fudi), target_fufi)
