import json
import cherrypy
from app import database
from app import view

#----------------------------------------------------------
class Application_cl(object):
#----------------------------------------------------------
    exposed = True

    #----------------------------------------------------------
    def __init__(self):
    #----------------------------------------------------------
        self.db_o = database.Database_cl()
        self.view_o = view.View_cl()

    #----------------------------------------------------------
    def GET(self, cat=None, id=None):
    #---------------------------------------------------------- 

        return json.dumps(retVal)

    #----------------------------------------------------------
    def PUT(self, **data):
    #----------------------------------------------------------

        return json.dumps(retVal)

    #----------------------------------------------------------
    def POST(self, cat, id, **data_opl):
    #----------------------------------------------------------

        return json.dumps(retVal)

    #----------------------------------------------------------
    def DELETE(self, cat, id):
    #----------------------------------------------------------

        return json.dumps(retVal)

    #----------------------------------------------------------
    def default(self, *arguments, **kwargs):
    #----------------------------------------------------------
        msg_s = "unbekannte Anforderung: " + \
            str(arguments) + \
            ' ' + \
            str(kwargs)
    raise cherrypy.HTTPError(404, msg_s) 

# /* import cherrypy
# from .database import Database_cl
# from .view import View_cl
# import collections
# orderedDict = collections.OrderedDict()
# from collections import OrderedDict

# #----------------------------------------------------------
# class Application_cl(object): 
# #----------------------------------------------------------

# #-------------------------------------------------------
# # Request Processing
# #-------------------------------------------------------

#     #-------------------------------------------------------
#     def __init__(self):
#     #-------------------------------------------------------
#         # spezielle Initialisierung können hier eingetragen werden
#         self.db = Database_cl()
#         self.view = View_cl()
#     @cherrypy.expose

#     #-------------------------------------------------------
#     def index(self):
#     #-------------------------------------------------------
#         print("Index\n")
#         return self.GenerateIndex()
#     @cherrypy.expose

#     #-------------------------------------------------------
#     def category(self, cat=None):
#     #-------------------------------------------------------
#         print("Category: ", cat, "\n")
#         if(cat==None):
#             return self.GenerateIndex()
#         else:
#             return self.GenerateList(cat)
#     @cherrypy.expose

#     #-------------------------------------------------------
#     def choice(self):
#     #-------------------------------------------------------
#         print("Choice \n")
#         return self.GenerateListChoice()
#     @cherrypy.expose

#     #-------------------------------------------------------
#     def eval(self, cat):
#     #-------------------------------------------------------
#         print("Eval \n")
#         self.db.CheckDates()
#         return self.GenerateListEval(cat)
#     @cherrypy.expose

#     #-------------------------------------------------------
#     def detail(self, cat=None, id=None):
#     #-------------------------------------------------------
#         if(cat!=None):
#             if(id!=None):
#                 print("Cat=", cat, " id=", id)
#                 return self.GenerateDetail(cat, id)
#             else:
#                 print("ID=None Cat=", cat)
#                 return self.GenerateDetail(cat)
#         else:
#             return self.GenerateIndex()
#     @cherrypy.expose

#     #-------------------------------------------------------
#     def detailchoice(self, id):
#     #-------------------------------------------------------
#         print("id=", id)
#         return self.GenerateDetailChoice(id)

#     @cherrypy.expose

#     #-------------------------------------------------------
#     def save(self, cat=None, **data):
#     #-------------------------------------------------------
#         print("Save: ", cat)
#         dataTmp = data
#         return self.GenerateSave(dataTmp, cat)
#     @cherrypy.expose

#     #-------------------------------------------------------
#     def saveChoice(self, **data):
#     #-------------------------------------------------------
#         print("Save: Choice")
#         dataTmp = data
#         return self.GenerateSaveChoice(dataTmp)
#     @cherrypy.expose

#     #-------------------------------------------------------
#     def delete(self, cat=None, id=None): 
#     #-------------------------------------------------------
#         print("Delete",cat,id)
#         return self.GenerateDelete(cat, id)
#     @cherrypy.expose
    
#     #-------------------------------------------------------
#     def default(self, *arguments, **kwargs): 
#     #-------------------------------------------------------
#         msg_s = "unbekannte Anforderung: " + \
#                 str(arguments) + \
#                 ''+ \
#                 str(kwargs)
#         raise cherrypy.HTTPError(404, msg_s)
#     default.exposed= True

# #-------------------------------------------------------
# # Functions
# #-------------------------------------------------------

#     #-------------------------------------------------------
#     def GenerateIndex(self):
#     #-------------------------------------------------------
#         return self.view.CreateIndex()

#     #-------------------------------------------------------
#     def GenerateList(self, category):
#     #-------------------------------------------------------
#         self.db.ReadAll()
#         data = {}
#         data['content'] = {}
#         data['headings'] = {}
#         data['category'] = category
#         data['content'] = self.db.data[category]
#         if(len(data['content']) != 0):
#             print(len(data['content']))
#             contentFirst = list(data['content'].keys())[0]
#             data['headings'] = list(data['content'][contentFirst].keys())
#         print(data)
#         return self.view.CreateList(data)

#     #-------------------------------------------------------
#     def GenerateListChoice(self):
#     #-------------------------------------------------------
#         self.db.ReadAll()
#         data = {}
#         data['content'] = {}
#         offerings = self.db.data['Angebote']
#         for key, value in offerings.items():
#             for key2, value2 in value.items():
#                 if(key2 == 'Status'):
#                     if(value2 == 'Angebot'):
#                         data['content'][key] = value              

#         print(data)
#         return self.view.CreateListChoice(data)

#     #-------------------------------------------------------
#     def GenerateDetail(self, category, id=None):
#     #-------------------------------------------------------
#         self.db.ReadAll()
#         data = {}
#         data['category'] = category
#         print("Detail",category,id)
#         if(id != None):
#             data['id'] = id
#             data['content'] = self.db.ReadEntry(category, id)
#         else:
#             data['id'] = None
#             data['content'] = self.db.GetDefault(category)
#             print(data['content'])
#         if(category == 'Angebote'):
#             print("Angebote")
#             data['Firmen'] = self.db.data['Firmen']
#         print(data, "\n")
#         return self.view.CreateDetail(data)

#     #-------------------------------------------------------
#     def GenerateDetailChoice(self, id):
#     #-------------------------------------------------------
#         self.db.ReadAll()
#         data = {}
#         data['id'] = id
#         data = self.db.data['Angebote'][id]
#         data['Studenten'] = self.db.data['Studenten']
#         data['Lehrender'] = self.db.data['Lehrender']
#         print(data, "\n")
#         return self.view.CreateDetailChoice(data)

#     #-------------------------------------------------------
#     def GenerateListEval(self, cat):
#     #-------------------------------------------------------
#         self.db.ReadAll()
#         data = {}
#         Studenten = self.db.data['Studenten']
#         Lehrender = self.db.data['Lehrender']
#         Firmen = self.db.data['Firmen']
#         Angebote = self.db.data['Angebote']

#         data['category'] = cat
#         if(cat == 'Firmen'):
#             for keyFirma, valueFirma in sorted(Firmen.items()):
#                 data[valueFirma['Name']] = {}
#                 data[valueFirma['Name']]['Name'] = valueFirma['Name']
#                 data[valueFirma['Name']]['Angebote'] = {}
#                 data[valueFirma['Name']]['Angebote']['Angebot'] = {}
#                 data[valueFirma['Name']]['Angebote']['aktuell'] = {}
#                 data[valueFirma['Name']]['Angebote']['abgeschlossen'] = {}
#                 for keyAngebote, valueAngebote in Angebote.items():
#                     if(valueAngebote['Firma'] == valueFirma['Name']):
#                         data[valueFirma['Name']]['Angebote'][valueAngebote['Status']][valueAngebote['Name']] = {}
#                         data[valueFirma['Name']]['Angebote'][valueAngebote['Status']][valueAngebote['Name']]['Name'] = valueAngebote['Name']
#                         if(valueAngebote['Student'] != ''):
#                             data[valueFirma['Name']]['Angebote'][valueAngebote['Status']][valueAngebote['Name']]['Student'] = Studenten[valueAngebote['Student']]['Name']
#                         else:
#                             data[valueFirma['Name']]['Angebote'][valueAngebote['Status']][valueAngebote['Name']]['Student'] = ''
#                         if(valueAngebote['Lehrender'] != ''):
#                             data[valueFirma['Name']]['Angebote'][valueAngebote['Status']][valueAngebote['Name']]['Lehrender'] = Lehrender[valueAngebote['Lehrender']]['Name']
#                         else:
#                             data[valueFirma['Name']]['Angebote'][valueAngebote['Status']][valueAngebote['Name']]['Lehrender'] = ''
#                         data[valueFirma['Name']]['Angebote'][valueAngebote['Status']][valueAngebote['Name']]['ZeitraumVon'] = valueAngebote['ZeitraumVon']
#                         data[valueFirma['Name']]['Angebote'][valueAngebote['Status']][valueAngebote['Name']]['ZeitraumBis'] = valueAngebote['ZeitraumBis']
#             print(data)
#             return self.view.CreateListEval(data)
#         elif(cat == 'Studenten'):
#             for keyStudent, valueStudent in Studenten.items():
#                 data[valueStudent['Name']] = {}
#                 data[valueStudent['Name']]['Angebote'] = {}
#                 data[valueStudent['Name']]['Angebote']['Angebot'] = {}
#                 data[valueStudent['Name']]['Angebote']['aktuell'] = {}
#                 data[valueStudent['Name']]['Angebote']['abgeschlossen'] = {}
#                 for keyAngebot, valueAngebot in Angebote.items():
#                     if(valueAngebot['Student'] == valueStudent['id']):
#                         data[valueStudent['Name']]['Angebote'][valueAngebot['Status']][keyAngebot] = {}
#                         data[valueStudent['Name']]['Angebote'][valueAngebot['Status']][keyAngebot]['Lehrender'] = Lehrender[valueAngebot['Lehrender']]['Name']
#                         data[valueStudent['Name']]['Angebote'][valueAngebot['Status']][keyAngebot]['Status'] = valueAngebot['Status']
#                         data[valueStudent['Name']]['Angebote'][valueAngebot['Status']][keyAngebot]['Praxisphase'] = valueAngebot['Name']
#                         data[valueStudent['Name']]['Angebote'][valueAngebot['Status']][keyAngebot]['Firma'] = valueAngebot['Firma']
#                         data[valueStudent['Name']]['Angebote'][valueAngebot['Status']][keyAngebot]['ZeitraumVon'] = valueAngebot['ZeitraumVon']
#                         data[valueStudent['Name']]['Angebote'][valueAngebot['Status']][keyAngebot]['ZeitraumBis'] = valueAngebot['ZeitraumBis']
#         elif(cat == 'Lehrender'):
#             for keyLehrende, valueLehrende in Lehrender.items():
#                 data[valueLehrende['Name']] = {}
#                 data[valueLehrende['Name']]['Angebote'] = {}
#                 data[valueLehrende['Name']]['Angebote']['Angebot'] = {}
#                 data[valueLehrende['Name']]['Angebote']['aktuell'] = {}
#                 data[valueLehrende['Name']]['Angebote']['abgeschlossen'] = {}
#                 for keyAngebot, valueAngebot in Angebote.items():
#                     if(valueAngebot['Lehrender'] == valueLehrende['id']):
#                         data[valueLehrende['Name']]['Angebote'][valueAngebot['Status']][keyAngebot] = {}
#                         data[valueLehrende['Name']]['Angebote'][valueAngebot['Status']][keyAngebot]['Student'] = Studenten[valueAngebot['Student']]['Name']
#                         data[valueLehrende['Name']]['Angebote'][valueAngebot['Status']][keyAngebot]['Status'] = valueAngebot['Status']
#                         data[valueLehrende['Name']]['Angebote'][valueAngebot['Status']][keyAngebot]['Praxisphase'] = valueAngebot['Name']
#                         data[valueLehrende['Name']]['Angebote'][valueAngebot['Status']][keyAngebot]['Firma'] = valueAngebot['Firma']
#                         data[valueLehrende['Name']]['Angebote'][valueAngebot['Status']][keyAngebot]['ZeitraumVon'] = valueAngebot['ZeitraumVon']
#                         data[valueLehrende['Name']]['Angebote'][valueAngebot['Status']][keyAngebot]['ZeitraumBis'] = valueAngebot['ZeitraumBis']

#         return self.view.CreateListEval(data)


#     #-------------------------------------------------------
#     def GenerateSave(self, dataTmp, category):
#     #-------------------------------------------------------
#         if(category == None):
#             return self.view.CreateIndex()
#         else:
#             self.db.Save(dataTmp, category)
#             return self.GenerateList(category)

#     #-------------------------------------------------------
#     def GenerateSaveChoice(self, dataTmp):
#     #-------------------------------------------------------
#         if(dataTmp['Student'] != ''):
#             angebote = self.db.CheckOfferings(dataTmp['Student'])
#             print(angebote)
#             if(angebote == 0):
#                 print("Save")
#                 self.db.Save(dataTmp, 'Angebote')
#         return self.GenerateListChoice()

#     #-------------------------------------------------------
#     def GenerateDelete(self, category, id):
#     #-------------------------------------------------------
#         if(category == None or id == None):
#             return self.view.CreateIndex()
#         else:
#             self.db.Delete(category, id)
#             return self.GenerateList(category)
# #EOF