#!/usr/bin/python

import logging, BaseHTTPServer
from ipprequest import *
import ippconstants as const

logging.basicConfig(level=logging.DEBUG)

class GutenbachIPPHandler(BaseHTTPServer.BaseHTTPRequestHandler):
    def handle_one_request(self):
        self.raw_requestline = self.rfile.readline()
        if not self.raw_requestline:
            self.close_connection = 1
            return
        if not self.parse_request(): # An error code has been sent, just exit
            return
        self.handle_ipp()

    def handle_ipp(self):
        length = int(self.headers.getheader('content-length', 0))
        request = IPPRequest(request=self.rfile,
                             length=length)

        response_kwargs = {}
        response_kwargs['version'] = request.version
        response_kwargs['request_id'] = request.request_id
        response_kwargs = self.get_jobs(request, response_kwargs)
        response = IPPRequest(**response_kwargs)

        self.send_response(200, "o hai")
        self.send_header("Content-Type", "application/ipp")
        self.send_header("Connection", "close")
        self.end_headers()
        self.wfile.write(response.toBinaryData())

    # def get_jobs(self, request, response_kwargs):
    #     """get-jobs response"""

    #     job_attributes = [IPPAttribute('job-id',
    #                                    [IPPValue(IPPTags.INTEGER,
    #                                              12345,
    #                                              unpack=False)]),
    #                       IPPAttribute('job-name',
    #                                    [IPPValue(IPPTags.NAME_WITHOUT_LANGUAGE,
    #                                              'foo',
    #                                              unpack=False)]),
    #                       IPPAttribute('job-originating-user-name',
    #                                    [IPPValue(IPPTags.NAME_WITHOUT_LANGUAGE,
    #                                              'jhamrick',
    #                                              unpack=False)]),
    #                       IPPAttribute('job-k-octets',
    #                                    [IPPValue(IPPTags.INTEGER,
    #                                              1,
    #                                              unpack=False)]),
    #                       IPPAttribute('job-state',
    #                                    [IPPValue(IPPTags.ENUM,
    #                                              const.IPP_JOB_HELD,
    #                                              unpack=False)]),
    #                       IPPAttribute('job-printer-uri',
    #                                    [IPPValue(IPPTags.URI,
    #                                              'http://localhost:8000/printers/foo',
    #                                              unpack=False)])]


    #     #req_op_attributes = request.getAttributeGroup(IPPTags.OPERATION_ATTRIBUTES_TAG)
    #     #print req_op_attributes
    #     #printer_uri = req_op_attributes[0].getAttribute('printer-uri')

    #     op_attributes = [IPPAttribute('attributes-charset',
    #                                   [IPPValue(IPPTags.CHARSET,
    #                                             'utf-8',
    #                                             unpack=False)]),
    #                      IPPAttribute('attributes-natural-language',
    #                                   [IPPValue(IPPTags.NATURAL_LANGUAGE,
    #                                             'en-us',
    #                                             unpack=False)])]
        
    #     job_attribute_group = IPPAttributeGroup(IPPTags.JOB_ATTRIBUTES_TAG,
    #                                             job_attributes)
    #     op_attributes_group = IPPAttributeGroup(IPPTags.OPERATION_ATTRIBUTES_TAG,
    #                                             op_attributes)
    #     response_kwargs['attribute_groups'] = [op_attributes_group,job_attribute_group]
    #     response_kwargs['operation_id'] = const.IPP_OK

    #     return response_kwargs

    ##### Printer Commands

    def print_job(self, request):
        pass

    def validate_job(self, request):
        pass

    def get_printer_attributes(self, request):
        pass

    def get_jobs(self, request):
        pass

    def print_uri(self, request):
        pass

    def create_job(self, request):
        pass

    def cups_get_default(self, request):
        pass

    def cups_get_printers(self, request):
        pass

    def pause_printer(self, request):
        pass

    def resume_printer(self, request):
        pass

    def set_printer_attributes(self, request):
        pass

    ##### Job Commands

    def cancel_job(self, request):
        pass

    def get_job_attributes(self, request):
        pass

    def send_document(self, request):
        pass

    def send_uri(self, request):
        pass

    def set_job_attributes(self, request):
        pass

    def cups_get_document(self, request):
        pass

    def restart_job(self, request):
        pass

    def promote_job(self, request):
        pass

if __name__ == '__main__':
    server_address = ('', 8000)
    httpd = BaseHTTPServer.HTTPServer(server_address, GutenbachIPPHandler)
    httpd.serve_forever()
