# import filer
import os
# import sys
# # import math
import subprocess

from grund import Grund
from trans import Trans
import filer


class Grisl:
    """this only works for Bims"""

    def __init__(self, erimp, do_verbose=False):
        self.e = erimp
        self.do_verbose = do_verbose
        self.grund  = Grund(self.e)
        self.trans = Trans(erimp)
        self.data = None
        self.papid_fufi = '/tmp/grisl.papids'
        self.gramf_fufi = '/tmp/grisl.amf.xml'
        self.prefix_length = 0
        if 'seed_prefix' in self.e.conf:
            self.prefix_length = len(self.e.conf['seed_prefix'])

    def run(self):
        self.get_papids()
        self.get_amf()
        self.get_html()

    def get_papids(self):
        grund_fufi = self.grund.fufi
        if not filer.donere(self.papid_fufi, [grund_fufi]):
            print(f"grisl donores {self.papid_fufi} over {grund_fufi}")
            return False
        self.data = filer.load(self.grund.fufi)
        papids = []
        for seed_papid in self.data:
            papid = seed_papid[self.prefix_length:]
            papids.append(papid)
        papids.sort()
        papids.reverse()
        papids_string = ''
        for papid in papids:
            papids_string += papid + "\n"
        filer.srite(self.papid_fufi, papids_string)
        return True

    def get_amf(self):
        """this is very close do sidat's get seeds, and should be merged"""
        e = self.e
        grund_fufi = self.grund.fufi
        gramf_fufi = self.gramf_fufi
        if not filer.donere(gramf_fufi, [grund_fufi]):
            return False
        if 'get_input_for_seeds' not in e.conf:
            ## fixMe: should be renames get_bib
            print("grisl sees no way to get grund.")
            return False
        seeds_to_amf = None
        style_filter_fufi = e.dirs['style'] + '/grund_to_collection.xslt.xml'
        if os.path.isfile(style_filter_fufi):
            seeds_to_amf = ' | /usr/bin/xsltproc ' + style_filter_fufi + ' - '
        runner = e.conf['get_input_for_seeds'] + ' ' + self.papid_fufi
        if seeds_to_amf is not None:
            runner += seeds_to_amf
        runner += ' > ' + gramf_fufi
        if self.do_verbose:
            print("grisl runs " + runner)
        subprocess.run(runner, shell=True)

    def get_html(self):
        e = self.e
        grisl_fudi = e.dirs['blatt'] + '/grisl'
        last_issuedate = e.issuedates[0]
        grisl_fufi = grisl_fudi + '/' + last_issuedate + '.html'
        filer.prepare(grisl_fufi)
        ## does not check the link
        #if not filer.donere(grisl_fufi, self.gramf_fufi):
        #    return False
        self.trans.via_system('papers_screen', self.gramf_fufi, grisl_fufi)
        print("grisl wrote " + grisl_fufi)
        grisl_link = grisl_fudi + '/index.html'
        filer.link_fufi(grisl_fufi, grisl_link)
        return True
