'''
Created on 02.08.2024

@author: sparky2021
'''
from eh_app.models import ConfigData

the_instance = None

class Config:
    '''
    Singleton Klasse für Konfiguration
    '''

    def __init__(self, verein):
        self.verein = verein
        
    def getConfig(self, key, default=None):
        data = ConfigData.objects.filter(verein=self.verein, key=key)
        if data:
            return data[0].value
        return default
    
    def requireConfig(self, key):
        data = self.getConfig(key)
        if not data:
            raise RuntimeError(f"Kein Eintag für: {self.verein}/{key}")
        return data
        
    def setConfig(self, key, value):
        # check, if entry already exists
        data = ConfigData.objects.filter(verein=self.verein, key=key)
        if data:
            # check data set
            if len(data) != 1:
                raise RuntimeError("config entry not unique")
            if data[0].value != value:
                data[0].value = value
                data[0].save()
        else:
            data = ConfigData(verein=self.verein, key=key, value=value)
            data.save()
        
def getInstance(verein=None):
    global the_instance
    if not the_instance:
        if not verein:
            raise RuntimeError("Bei der ersten Instanzierung muss der Verein mitgegeben werden.")
        the_instance = Config(verein)
    return the_instance
