import tornado.web
import tornado.gen
import survey
import config

import logging
l = logging.getLogger(__name__)

class BaseHandler(tornado.web.RequestHandler):
    def get_current_user(self):
        user_json = self.get_secure_cookie("%s_user" % config.APP_NAME)
        if not user_json: return None
        return tornado.escape.json_decode(user_json)

    def render_string(self, template_name, **kwargs):
        for var in ["pagename", "onload"]:
            if var not in kwargs.keys(): kwargs[var] = None
        return super(BaseHandler, self).render_string(template_name, **kwargs)

class TemplateHandler(BaseHandler):
    def get(self, pagename = None, id = None):
        if pagename: self.render("%s.html" % pagename, pagename = pagename)
        else: self.render("index.html", pagename = pagename)

class MainHandler(BaseHandler):
    @tornado.gen.coroutine
    def get(self):
        self.render("index.html")

class PDFSurveyHandler(BaseHandler):
    def get(self, pagename, id = None):
        #Downlaod?
        #self.set_header("Content-Disposition","attachment; filename=foo.pdf")
        #TODO: Async support?
        pdf = survey.getPDF(id)
        self.set_header("Content-Type","application/pdf")
        self.write(pdf)

class DataHandler(BaseHandler):
    def get(self, args):
        #TODO: Get data from database, render as appropriate type
        #TODO: render as appropriate type
        #TODO: get from GET variables
        filename = "data"
        type = "csv"
        download = False
        if type == "csv":
            self.set_header("Content-Type","application/CSV")
        elif type == "xlsx":
            self.set_header("Content-Type","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
        else:
            #TODO Send 500 error
            pass
        if download:
            self.set_header("Content-Disposition","attachment; filename=%s.%s" % (filename, type))
        data = ""
        self.write(data)
 
class MultiStaticFileHandler(tornado.web.StaticFileHandler):
    def initialize(self, paths):
        self.paths = paths 

    def get(self, path):
        for p in self.paths:
            try:
                # Initialize the Static file with a path
                super(MultiStaticFileHandler, self).initialize(p)
                # Try to get the file
                return super(MultiStaticFileHandler, self).get(path)
            except tornado.web.HTTPError as exc:
                # File not found, carry on
                if exc.status_code == 404:
                    continue
                raise
        # Oops file not found anywhere!
        raise tornado.web.HTTPError(404)
