"""Mode creation page (used to add modes to courses during testing)."""

import re
import urllib

from bok_choy.page_object import PageObject

from common.test.acceptance.pages.lms import BASE_URL


class ModeCreationPage(PageObject):
    """The mode creation page.

    When allowed by the Django settings file, visiting this page allows modes to be
    created for an existing course.
    """

    def __init__(self, browser, course_id, mode_slug=None, mode_display_name=None, min_price=None,
                 suggested_prices=None, currency=None, sku=None):
        """The mode creation page is an endpoint for HTTP GET requests.

        By default, it will create an 'honor' mode for the given course with display name
        'Honor Code', a minimum price of 0, no suggested prices, and using USD as the currency.

        Arguments:
            browser (Browser): The browser instance.
            course_id (unicode): The ID of the course for which modes are to be created.

        Keyword Arguments:
            mode_slug (str): The mode to add, either 'honor', 'verified', or 'professional'
            mode_display_name (str): Describes the new course mode
            min_price (int): The minimum price a user must pay to enroll in the new course mode
            suggested_prices (str): Comma-separated prices to suggest to the user.
            currency (str): The currency in which to list prices.
            sku (str): The product SKU value.
        """
        super(ModeCreationPage, self).__init__(browser)

        self._course_id = course_id
        self._parameters = {}

        if mode_slug is not None:
            self._parameters['mode_slug'] = mode_slug

        if mode_display_name is not None:
            self._parameters['mode_display_name'] = mode_display_name

        if min_price is not None:
            self._parameters['min_price'] = min_price

        if suggested_prices is not None:
            self._parameters['suggested_prices'] = suggested_prices

        if currency is not None:
            self._parameters['currency'] = currency

        if sku is not None:
            self._parameters['sku'] = sku

    @property
    def url(self):
        """Construct the mode creation URL."""
        url = '{base}/course_modes/create_mode/{course_id}/'.format(
            base=BASE_URL,
            course_id=self._course_id
        )

        query_string = urllib.urlencode(self._parameters)
        if query_string:
            url += '?' + query_string

        return url

    def is_browser_on_page(self):
        message = self.q(css='BODY').text[0]
        match = re.search(r'Mode ([^$]+) created for ([^$]+).$', message)
        return True if match else False
