# coding: utf-8

import json

import cherrypy

from app import database
from app import view

# Method-Dispatching!

# Übersicht Anforderungen / Methoden
# (beachte: / relativ zu /lit, siehe Konfiguration Server!)

"""

Anforderung       GET          PUT          POST          DELETE
----------------------------------------------------------------
/                 Liste        -            -             -
                  Literatur
                  liefern

/0                Dokument     Dokument     -             -
                  mit id=0     anlegen      
                  liefern
                  (Vorgabe-Werte)

/{id}             Dokument     -            Dokument      Dokument
                  mit {id}                  ändern        löschen
                  liefern

id > 0 ! 

"""

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

   exposed = True # gilt für alle Methoden

   #-------------------------------------------------------
   def __init__(self):
   #-------------------------------------------------------
      # spezielle Initialisierung können hier eingetragen werden
      self.db_o = database.Database_cl()
      self.view_o = view.View_cl()

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

   #-------------------------------------------------------
   def GET(self, id=None):
   #-------------------------------------------------------
      retVal_o = {
         'data': None
      }
      if id == None:
         # Anforderung der Liste
         retVal_o['data'] = self.getList_p()
      else:
         # Anforderung eines Dokuments
         retVal_o['data'] = self.getForm_p(id)

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

      return json.dumps(retVal_o)
      
   #-------------------------------------------------------
   def PUT(self, **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!

      data_o = {
         'name': data_opl["name_s"],
         'typ': data_opl["typ_s"],
         'referenz': data_opl["referenz_s"]
      }
      # Create-Operation
      id_s = self.db_o.create_px(data_o)
      retVal_o['id'] = id_s
      if id_s == None:
         cherrypy.response.status = 409
         
      return json.dumps(retVal_o)
      
   #-------------------------------------------------------
   def POST(self, id, **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!

      id_s = data_opl["id_s"]
      data_o = {
         'name': data_opl["name_s"],
         'typ': data_opl["typ_s"],
         'referenz': data_opl["referenz_s"]
      }
      # Update-Operation
      retVal_o['id'] = id_s
      if self.db_o.update_px(id_s, data_o):
         pass
      else:
         cherrypy.response.status = 404

      return json.dumps(retVal_o)

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

      if self.db_o.delete_px(id):
         pass
      else:
         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) 

   #-------------------------------------------------------
   def getList_p(self):
   #-------------------------------------------------------
      data_o = self.db_o.read_px()
      return self.view_o.createList_px(data_o)
   
   #-------------------------------------------------------
   def getForm_p(self, id_spl):
   #-------------------------------------------------------
      data_o = self.db_o.read_px(id_spl)
      if data_o != None:
         return self.view_o.createForm_px(id_spl, data_o)
      else:
         return None
# EOF