'''
Created on 04.12.2024

@author: sparky2021
'''
from q import QError
from qif import QIF
from .AWK import config

class MitgliederQuery:
    def __init__(self):
        self.data_source = QIF({"d" : ";", "H" : 1})
        '''
            d (separator)  : ;
            H (header line): yes
        '''
        self.file_name = config.getInstance().requireConfig("DataFile")
        self.att_list = "`Mitglieds-Nr`, Anrede, Vorname, Nachname, `Straße`, PLZ, Ort, Geburtsdatum, Eintrittsdatum, Austrittsdatum, Zahlungsart, Iban, Bic, Kontoinhaber, Mandatsreferenz, `KommE-Mail_P1`"
        #                 0              1       2        3          4        5    6    7             8               9               10           11    12   13            14     15         16              17     
    def all(self):
        import datetime
        
        data_set = self.data_source.request(f"SELECT {self.att_list} FROM {self.file_name} WHERE Abteilung_1 = 'Standard'")
        if type(data_set) is QError:
            raise RuntimeError(data_set)
        mm = []
        for data in data_set:
            eintrittsdatum = datetime.datetime.strptime(data[8], '%d.%m.%Y')
            if eintrittsdatum > datetime.datetime.today():
                continue
            if data[9] != "":
                austrittsdatum = datetime.datetime.strptime(data[9], '%d.%m.%Y')
                if austrittsdatum < datetime.datetime.today():
                    continue
            m = Mitglied()
            m.mitgliedsnr    = data[0]
            m.anrede = data[1]
            m.vorname = data[2]
            m.nachname = data[3]
            m.strasse  = data[4]
            # "Zusatzadresse"
            m.plz      = data[5]
            m.ort      = data[6]
            
            # "Land"
            # "Titel"
            # "Geschlecht"
            # "Familienstand"
            # m.geburtsdatum   = data[7]
            # "Austrittsgrund"
            # m.zahlungsart    = data[16]
            m.iban           = data[11]
            # m.bic            = data[18]
            # "Kontonummer"
            # "Bankleitzahl"
            # "Kreditinstitut"
            # m.kontoinhaber   = data[22]
            # m.mandatsreferenz = data[23]
            # m.debitorenkontonr = data[24]
            # m.status           = data[25]
            # "Branche"
            # "Notfallnummer"
            # "Notfallkontakt"
            # m.email            = data[29] # "KommE-Mail_P1"
            # "KommFax_P1"
            # "KommMobil_P1"
            # "KommWeb_P1"
            # "KommTelefon_P1"
            # "KommSkype_P1"
            # m.abteilung_1      = data[35]
            # m.abteilungseintritt_1 = data[36]
            # m.abteilungsaustritt_1 = data[37]
            # if data[67] == '""':
            #     m.stammnummer = 0
            # else:
            #     m.stammnummer       = int(m.rd_opt_qval(data[67]))
            # "Freifeldname_2"
            # m.ver_grund           = m.rd_opt_qval(data[69])
            # if len(m.ver_grund) == 0:
            #     m.ver_grund = f"{m.strasse}, {m.plz} {m.ort}"
            # "Freifeldname_3"
            # m.zeitung             = data[71]
            mm.append(m)
        return mm
    
    def VersicherteGrundstucke(self, mitglied):
        # Hole Basiseintrag
        data_set = self.data_source.request(f"SELECT Freifeldwert_2 FROM {self.file_name} WHERE `Mitglieds-Nr` = {mitglied.mitgliedsnr}")
        if data_set[0][0]:
            gr = data_set[0][0]
        else:
            gr = f"{mitglied.strasse}, {mitglied.plz} {mitglied.ort}"
        gst = [gr]
        
        # Suche nach weiteren Grunstücken
        data_set = self.data_source.request(f"SELECT Freifeldwert_2 FROM {self.file_name} WHERE Freifeldname_1 = 'Partnernummer' AND Freifeldwert_1 = {mitglied.mitgliedsnr}")
        for data in data_set:
            if len(data[0]) > 0:
                gst.append(data[0])
            else:
                gst.append(f"{mitglied.strasse}, {mitglied.plz} {mitglied.ort}")
                
        return gst
    
class Mitglied:
    # TODO: In property verwandeln 
    objects = MitgliederQuery()
    def __init__(self):
        pass
    
    def VersicherteGrundstucke(self):
        return self.objects.VersicherteGrundstucke(self)
