# coding: utf-8

import json
import datetime
import time

import cherrypy

from app import database

# Method-Dispatching!

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

"""

Anforderung				GET			PUT				POST				DELETE
----------------------------------------------------------------

					
/beitrag/{diskussion-id}		alle Beiträge	        neuen Beitrag	                -				-
					zur Diskussion	        zur Diskussion speichern
					anfordern		beitrag-id zurück
												
/beitrag/{beitrag-id}			einen Beitrag	        -				Beitrag mit ID		Beitrag mit ID
					anfordern						ändern				löschen
										
"""

#----------------------------------------------------------
class Post_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, tId, dId, pId = None):
   #-------------------------------------------------------
      retVal_o = {'data': None, 'id': pId, 'tId':tId, 'dId': dId}
      
      if dId == None:
         # Anforderung der Liste
         retVal_o['data'] = self.getList_p(dId)
      else:
         # Anforderung eines Dokuments
         retVal_o['data'] = self.getPost(dId, pId)
         
      if retVal_o['data'] == None:
         cherrypy.response.status = 404

      return json.dumps(retVal_o)
      
   #-------------------------------------------------------
   def PUT(self, tId, dId, **data_opl):
   #-------------------------------------------------------
      retVal_o = {
         'id': None,
         'dId': dId
      }

      # data_opl: Dictionary mit den gelieferten key-value-Paaren
      if dId == 0 or dId == "0":
         discData_o = self.db_o.getDefaultDiscussion_px()
         discData_o['name'] = data_opl['title']
         discData_o['owner'] = data_opl['owner']
         dId = self.db_o.createDiscussion_px(tId, discData_o)
         retVal_o['dId'] = dId

      # hier müsste man prüfen, ob die Daten korrekt vorliegen!
      data_o = self.db_o.getDefaultPost_px()
      data_o['title'] = data_opl['title']
      data_o['text'] = data_opl['text']
      data_o['owner'] = data_opl['owner']

      # Create-Operation
      id_s = self.db_o.createPost_px(dId, data_o)
      retVal_o['id'] = id_s
      if retVal_o['id'] == None:
         cherrypy.response.status = 409
         
      return json.dumps(retVal_o)
      
   #-------------------------------------------------------
   def POST(self, tId, dId, 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,
         'tId': tId,
         'dId': dId
      }

      # 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['posts'][id_]
      data_o['text'] = data_opl['text']
      data_o['title'] = data_opl['title']
      
      # Update-Operation
      retVal_o['id'] = id_
      if self.db_o.updatePost_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.deletePost_px(id_):
         pass
      else:
         cherrypy.response.status = 404

      return json.dumps(retVal_o)

   #-------------------------------------------------------
   def getList_p(self, tId):
   #-------------------------------------------------------
      data_o = self.db_o.readPost_px(tId)

      return data_o
   getList_p.exposed = False;
   
   #-------------------------------------------------------
   def getPost(self, tId, dId):
   #-------------------------------------------------------
      data_o = self.db_o.readPost_px(tId, dId)

      return data_o
   getPost.exposed = False;
      
# EOF