# coding: utf-8

import json

import cherrypy

from .projekt import Projekt_cl, ProjektKomponenten_cl, Komponente_cl
from .staff import QsMitarbeiter_cl, SwEntwickler_cl
from .error import KatFehler_cl, KatUrsache_cl, Fehler_cl
from .eval import ProList_cl, KatList_cl

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

   exposed = True # gilt für alle Methoden

   #-------------------------------------------------------
   def __init__(self):
   #-------------------------------------------------------
      self.handler_o = {
         'projekt': Projekt_cl(),
         'projektkomponenten': ProjektKomponenten_cl(),
         'komponente': Komponente_cl(),

         'qsmitarbeiter': QsMitarbeiter_cl(),
         'swentwickler': SwEntwickler_cl(),

         'katfehler': KatFehler_cl(),
         'katursache': KatUrsache_cl(),
         'fehler': Fehler_cl(),

         'prolist': ProList_cl(),
         'katlist': KatList_cl()
      }

   # es wird keine index-Methode vorgesehen, weil stattdessen
   # die Webseite index.html ausgeliefert wird (siehe Konfiguration)

   #-------------------------------------------------------
   def GET(self, path_spl = 'projekt', id=None):
   #-------------------------------------------------------
      retVal_o = {
         'data': None
      }

      if path_spl in self.handler_o:
         retVal_o = self.handler_o[path_spl].GET(id)

      if retVal_o['data'] == None:
         cherrypy.response.status = 404

      return json.dumps(retVal_o)
      
   #-------------------------------------------------------
   def POST(self, path_spl = 'projekt', **data_opl):
   #-------------------------------------------------------
      retVal_o = {
         'id': None
      }

      # data_opl: Dictionary mit den gelieferten key-value-Paaren

      # hier müsste man prüfen, ob die Daten korrekt vorliegen!

      if path_spl in self.handler_o:
         retVal_o = self.handler_o[path_spl].POST(data_opl)

      if retVal_o['id'] == None:
         cherrypy.response.status = 409
         
      return json.dumps(retVal_o)
      
   #-------------------------------------------------------
   def PUT(self, path_spl = 'projekt', **data_opl):
   #-------------------------------------------------------
      # Sichern der Daten: jetzt wird keine vollständige Seite
      # zurückgeliefert, sondern nur noch die Information, ob das
      # Speichern erfolgreich war

      retVal_o = {
         'id': None
      }

      # data_opl: Dictionary mit den gelieferten key-value-Paaren
      # hier müsste man prüfen, ob die Daten korrekt vorliegen!

      if path_spl in self.handler_o:
         retVal_o = self.handler_o[path_spl].PUT(data_opl)

      if retVal_o['id'] == None:
         cherrypy.response.status = 404

      return json.dumps(retVal_o)

   #-------------------------------------------------------
   def DELETE(self, path_spl = 'projekt', id=None):
   #-------------------------------------------------------
      # Eintrag löschen, nur noch Rückmeldung liefern
      retVal_o = {
         'id': id
      }

      if path_spl in self.handler_o:
         retVal_o = self.handler_o[path_spl].DELETE(id)

      if retVal_o['id'] == None:
         cherrypy.response.status = 404

      return json.dumps(retVal_o)

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

# EOF