# coding: utf-8

import os
import os.path
import codecs
import json

#----------------------------------------------------------
class Database_cl(object): 
#----------------------------------------------------------
    # da es hier nur darum geht, die Daten dauerhaft zu speichern,
    # wird ein sehr einfacher Ansatz verwendet:
    # - es können Daten zu genau 15 Teams gespeichert werden
    # - je Team werden 2 Teilnehmer mit Namen, Vornamen und Matrikelnummer
    #   berücksichtigt
    # - die Daten werden als eine JSON-Datei abgelegt
    

    #-------------------------------------------------------
    def __init__(self): 
    #-------------------------------------------------------
        self.data = {}
        self.data['students'] = {}
        self.data['teachers'] = {}
        self.data['companies'] = {}
        self.data['offerings'] = {}
        self.Read('students')
        self.Read('teachers')
        self.Read('companies')
        self.Read('offerings')    

    #------------------------------------------------------- 
    def Read(self, category):
    #-------------------------------------------------------
        path = 'data/' + category
        if not(os.path.exists(path)):
            os.makedirs(path)
        categoryDir = os.listdir(path)
        for fileName in categoryDir:
            if fileName.endswith('.json') and fileName != 'last.json':
                file = codecs.open(os.path.join('data', category, fileName), 'rU', 'utf-8')
                fileContent = file.read()
                id = fileName[:-5]
                self.data[category][id] = json.loads(fileContent)

    #-------------------------------------------------------
    def ReadEntry(self, category = None, id = None): 
    #-------------------------------------------------------
        print("ReadEntry: ", category, id)
        data = None
        if id == None:
            data = self.data
        else:
            if id in self.data[category]: 
                data = self.data[category][id]
        
        print(data, "\n")
        return data

    #-------------------------------------------------------
    def Save(self, data, category): 
    #-------------------------------------------------------
        status_b = False
        id = data['id']
        print("ID: ", id, "\n")
        if(id != "None"):
            if id in self.data[category]:
                file = codecs.open(os.path.join('data', category, id+'.json'), 'w', 'utf-8')
                file.write(json.dumps(data, indent=3, ensure_ascii=True))
                file.close()
                self.data[category][id] = data
                status_b = True
        else:
            data['id'] = self.IdNext(category)
            file = codecs.open(os.path.join('data', category, data['id']+'.json'), 'w', 'utf-8')
            file.write(json.dumps(data, indent=3, ensure_ascii=True))
            file.close()
            self.data[category][id] = data
            status_b = True
        
        return status_b

    #-------------------------------------------------------
    def Delete(self, category, id): 
    #-------------------------------------------------------
        status_b = False
        if id in self.data[category]:
            os.remove(os.path.join('data', category, id+'.json'))
            del self.data[category][id]
        
        return status_b

    #-------------------------------------------------------
    def GetDefault(self, category): 
    #-------------------------------------------------------
        if(category == 'students'):
            return {'name':'name', 'vorname':'vorname', 'matrikelnummer':'matrikelnummer'}
        elif(category == 'teachers'):
            return {'titel':'titel', 'name':'name', 'vorname':'vorname', 'lehrgebiet':'lehrgebiet'}
        elif(category == 'companies'):
            return {'name':'name', 'branche':'branche', 'schwerpunkt':'schwerpunkt', 'sitz':'sitz', 'anzahlMitarbeiter':'anzahlMitarbeiter'}
        elif(category == 'offerings'):
            return {'name':'name', 'company':'company', 'beschreibung':'beschreibung', 'voraussetzungen':'voraussetzungen', 'firmenbetreuer':'firmenbetreuer'}

    #-------------------------------------------------------
    def IdNext(self, category):
    #-------------------------------------------------------
        path = 'data/' + category + '/last.json'
        if(os.path.isfile(path)):
            file = open(os.path.join('data', category, 'last.json'), 'r+')
            last = file.read()
            last = str(int(last)+1)
            file.seek(0)
            file.write(last)
            file.close()
        else:
            file = open(os.path.join('data', category, 'last.json'), 'w+')
            last = str(int(0))
            file.write(last)
            file.close()
        return last
            
# EOF