"""
Stub implementation of ecommerce service for acceptance tests
"""

import re
import urlparse

from .http import StubHttpRequestHandler, StubHttpService


class StubEcommerceServiceHandler(StubHttpRequestHandler):  # pylint: disable=missing-docstring

    def do_GET(self):  # pylint: disable=invalid-name, missing-docstring
        pattern_handlers = {
            '/api/v2/orders/$': self.get_orders_list,
        }
        if self.match_pattern(pattern_handlers):
            return
        self.send_response(404, content='404 Not Found')

    def match_pattern(self, pattern_handlers):
        """
        Find the correct handler method given the path info from the HTTP request.
        """
        path = urlparse.urlparse(self.path).path
        for pattern in pattern_handlers:
            match = re.match(pattern, path)
            if match:
                pattern_handlers[pattern](**match.groupdict())
                return True
        return None

    def get_orders_list(self):
        """
        Stubs the orders list endpoint.
        """
        orders = {
            'results': [
                {
                    'status': 'Complete',
                    'number': 'Edx-123',
                    'total_excl_tax': '100.00',
                    'date_placed': '2016-04-21T23:14:23Z',
                    'lines': [
                        {
                            'title': 'Test Course',
                            'line_price_excl_tax': '100.00',
                            'product': {
                                'product_class': 'Seat'
                            }
                        }
                    ],
                }
            ]
        }
        orders = self.server.config.get('orders', orders)
        self.send_json_response(orders)


class StubEcommerceService(StubHttpService):  # pylint: disable=missing-docstring
    HANDLER_CLASS = StubEcommerceServiceHandler