""" URL definitions for the verify_student app. """

from django.conf import settings
from django.conf.urls import patterns, url

from verify_student import views


urlpatterns = patterns(
    '',

    # The user is starting the verification / payment process,
    # most likely after enrolling in a course and selecting
    # a "verified" track.
    url(
        r'^start-flow/{course}/$'.format(course=settings.COURSE_ID_PATTERN),
        # Pylint seems to dislike the as_view() method because as_view() is
        # decorated with `classonlymethod` instead of `classmethod`.
        views.PayAndVerifyView.as_view(),  # pylint: disable=no-value-for-parameter
        name="verify_student_start_flow",
        kwargs={
            'message': views.PayAndVerifyView.FIRST_TIME_VERIFY_MSG
        }
    ),

    # The user is enrolled in a non-paid mode and wants to upgrade.
    # This is the same as the "start verification" flow,
    # except with slight messaging changes.
    url(
        r'^upgrade/{course}/$'.format(course=settings.COURSE_ID_PATTERN),
        views.PayAndVerifyView.as_view(),  # pylint: disable=no-value-for-parameter
        name="verify_student_upgrade_and_verify",
        kwargs={
            'message': views.PayAndVerifyView.UPGRADE_MSG
        }
    ),

    # The user has paid and still needs to verify.
    # Since the user has "just paid", we display *all* steps
    # including payment.  The user resumes the flow
    # from the verification step.
    # Note that if the user has already verified, this will redirect
    # to the dashboard.
    url(
        r'^verify-now/{course}/$'.format(course=settings.COURSE_ID_PATTERN),
        views.PayAndVerifyView.as_view(),  # pylint: disable=no-value-for-parameter
        name="verify_student_verify_now",
        kwargs={
            'always_show_payment': True,
            'current_step': views.PayAndVerifyView.FACE_PHOTO_STEP,
            'message': views.PayAndVerifyView.VERIFY_NOW_MSG
        }
    ),

    # The user has paid and still needs to verify,
    # but the user is NOT arriving directly from the payment flow.
    # This is equivalent to starting a new flow
    # with the payment steps and requirements hidden
    # (since the user already paid).
    url(
        r'^verify-later/{course}/$'.format(course=settings.COURSE_ID_PATTERN),
        views.VerifyLaterView.as_view(),  # pylint: disable=no-value-for-parameter
        name="verify_student_verify_later"
    ),

    # The user is returning to the flow after paying.
    # This usually occurs after a redirect from the shopping cart
    # once the order has been fulfilled.
    url(
        r'^payment-confirmation/{course}/$'.format(course=settings.COURSE_ID_PATTERN),
        views.PayAndVerifyView.as_view(),  # pylint: disable=no-value-for-parameter
        name="verify_student_payment_confirmation",
        kwargs={
            'always_show_payment': True,
            'current_step': views.PayAndVerifyView.PAYMENT_CONFIRMATION_STEP,
            'message': views.PayAndVerifyView.PAYMENT_CONFIRMATION_MSG
        }
    ),

    url(
        r'^create_order',
        views.create_order,
        name="verify_student_create_order"
    ),

    url(
        r'^results_callback$',
        views.results_callback,
        name="verify_student_results_callback",
    ),

    url(
        r'^submit-photos/$',
        views.submit_photos_for_verification,
        name="verify_student_submit_photos"
    ),

    # End-point for reverification
    # Reverification occurs when a user's initial verification attempt
    # is denied or expires.  The user is allowed to retry by submitting
    # new photos.  This is different than *in-course* reverification,
    # in which a student submits only face photos, which are matched
    # against the ID photo from the user's initial verification attempt.
    url(
        r'^reverify$',
        views.ReverifyView.as_view(),
        name="verify_student_reverify"
    ),

    # Endpoint for in-course reverification
    # Users are sent to this end-point from within courseware
    # to re-verify their identities by re-submitting face photos.
    url(
        r'^reverify/{course_id}/{usage_id}/$'.format(
            course_id=settings.COURSE_ID_PATTERN,
            usage_id=settings.USAGE_ID_PATTERN
        ),
        views.InCourseReverifyView.as_view(),
        name="verify_student_incourse_reverify"
    ),
)

# Fake response page for incourse reverification ( software secure )
if settings.FEATURES.get('ENABLE_SOFTWARE_SECURE_FAKE'):
    from verify_student.tests.fake_software_secure import SoftwareSecureFakeView
    urlpatterns += patterns(
        'verify_student.tests.fake_software_secure',
        url(r'^software-secure-fake-response', SoftwareSecureFakeView.as_view()),
    )
