import logging
import urllib.request, urllib.error, urllib.parse
import urllib.parse
import uuid
import json
from datetime import datetime

import requestresponder
from edge.httputility import HttpUtility

class Writer(requestresponder.RequestResponder):
    def __init__(self, configFilePath):
        super(Writer, self).__init__(configFilePath)

    def options(self, requestHandler):
        super(Writer, self).options(requestHandler)
        self.requestHandler.set_header('Access-Control-Allow-Origin', '*')
        self.requestHandler.set_header('Access-Control-Allow-Methods', 'POST, GET, OPTIONS')
        self.requestHandler.set_header('Access-Control-Allow-Headers', 'Content-Type, X-Requested-With')
        self.requestHandler.set_header('Allow', 'OPTIONS, GET, HEAD, POST')
        self.requestHandler.set_header('Accept', 'application/json')
        self.requestHandler.set_status(200)
        self.requestHandler.finish()

    def post(self, requestHandler):
        super(Writer, self).post(requestHandler)
        data = json.loads(requestHandler.request.body)

        data["id"] = str(uuid.uuid4())
        data["submit_date"] = datetime.utcnow().isoformat() + "Z"

        httpUtility = HttpUtility()
        solrUrl = self._configuration.get('solr', 'url') + "/update/json/docs?commit=true"
        result = httpUtility.getResponse(solrUrl, self.onResponse, body=json.dumps(data), headers={'Content-Type': 'application/json'})

    def onResponse(self, response):
        self.requestHandler.set_header('Access-Control-Allow-Origin', '*')
        if response.error:
            self.requestHandler.set_status(404)
            self.requestHandler.write(str(response.error))
            self.requestHandler.finish()
        else:
            self.requestHandler.write(response.body)
            self.requestHandler.finish()
