# coding: utf-8

import json

import cherrypy

from app import database

# Method-Dispatching!

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

"""

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

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

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

id > 0 ! 

"""

#----------------------------------------------------------
class Topic_cl(object):
#----------------------------------------------------------

   exposed = True # gilt für alle Methoden

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

   #-------------------------------------------------------
   def GET(self, id_ = None):
   #-------------------------------------------------------
      retVal_o = {'data': None, 'id': None}
      
      if id == None:
         # Anforderung der Liste
         retVal_o['data'] = self.getList_p()
      else:
         # Anforderung eines Dokuments
         retVal_o['data'] = self.getTopic(id_)
         retVal_o['id'] = 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!

      print(data_opl)
      data_o = {
         'name' : data_opl['name'],
         'owner': data_opl['owner'],
         'deleted': False,
         'discs': []
      }

      # Create-Operation
      id_s = self.db_o.createTopic_px(data_o)
      retVal_o['id'] = id_s
      if retVal_o['id'] == 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_ = str(id_)
      data_o = self.db_o.data_o['topics'][id_]
      data_o['name'] = data_opl['name']
      
      # Update-Operation
      retVal_o['id'] = id_
      if self.db_o.updateTopic_px(id_, 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.deleteTopic_px(id_):
         pass
      else:
         cherrypy.response.status = 404

      return json.dumps(retVal_o)

   #-------------------------------------------------------
   def getList_p(self):
   #-------------------------------------------------------
      data_o = self.db_o.readTopic_px()

      return data_o
   getList_p.exposed = False;
   
   #-------------------------------------------------------
   def getTopic(self, id_spl):
   #-------------------------------------------------------
      data_o = self.db_o.readTopic_px(id_spl)

      return data_o
   getTopic.exposed = False;
      
# EOF