/**
 * Entry point for the payment/verification flow.
 * This loads the base view, which in turn loads
 * subviews for each step in the flow.
 *
 * We pass some information to the base view
 * using "data-" attributes on the parent div.
 * See "pay_and_verify.html" for the exact attribute names.
 *
 */
var edx = edx || {};

(function($, _) {
    'use strict';
    var errorView,
        $el = $('#pay-and-verify-container');

    edx.verify_student = edx.verify_student || {};

    // Initialize an error view for displaying top-level error messages.
    errorView = new edx.verify_student.ErrorView({
        el: $('#error-container')
    });

    // Initialize the base view, passing in information
    // from the data attributes on the parent div.
    //
    // The data attributes capture information that only
    // the server knows about, such as the course and course mode info,
    // full URL paths to static underscore templates,
    // and some messaging.
    //
    return new edx.verify_student.PayAndVerifyView({
        errorModel: errorView.model,
        displaySteps: $el.data('display-steps'),
        currentStep: $el.data('current-step'),
        courseKey: $el.data('course-key'),
        checkpointLocation: $el.data('checkpoint-location'),
        stepInfo: {
            'intro-step': {
                courseName: $el.data('course-name'),
                hasPaid: $el.data('msg-key') === 'verify-now' || $el.data('msg-key') === 'verify-later',
                isActive: $el.data('is-active'),
                platformName: $el.data('platform-name'),
                requirements: $el.data('requirements')
            },
            'make-payment-step': {
                isActive: $el.data('is-active'),
                requirements: $el.data('requirements'),
                courseKey: $el.data('course-key'),
                courseName: $el.data('course-name'),
                userEmail: $el.data('user-email'),
                userLanguage: $el.data('user-language'),
                userTimezone: $el.data('user-timezone'),
                hasVisibleReqs: _.some(
                    $el.data('requirements'),
                    function(isVisible) { return isVisible; }
                ),
                upgrade: $el.data('msg-key') === 'upgrade',
                minPrice: $el.data('course-mode-min-price'),
                sku: $el.data('course-mode-sku'),
                contributionAmount: $el.data('contribution-amount'),
                suggestedPrices: _.filter(
                    ($el.data('course-mode-suggested-prices').toString()).split(','),
                    function(price) { return Boolean(price); }
                ),
                currency: $el.data('course-mode-currency'),
                processors: $el.data('processors'),
                verificationDeadline: $el.data('verification-deadline'),
                courseModeSlug: $el.data('course-mode-slug'),
                alreadyVerified: $el.data('already-verified'),
                verificationGoodUntil: $el.data('verification-good-until'),
                isABTesting: $el.data('is-ab-testing')
            },
            'payment-confirmation-step': {
                courseKey: $el.data('course-key'),
                courseName: $el.data('course-name'),
                coursewareUrl: $el.data('courseware-url'),
                platformName: $el.data('platform-name'),
                requirements: $el.data('requirements')
            },
            'face-photo-step': {
                platformName: $el.data('platform-name'),
                captureSoundPath: $el.data('capture-sound')
            },
            'id-photo-step': {
                platformName: $el.data('platform-name'),
                captureSoundPath: $el.data('capture-sound')
            },
            'review-photos-step': {
                fullName: $el.data('full-name'),
                platformName: $el.data('platform-name')
            },
            'enrollment-confirmation-step': {
                courseName: $el.data('course-name'),
                coursewareUrl: $el.data('courseware-url'),
                platformName: $el.data('platform-name')
            }
        }
    }).render();
}(jQuery, _));