var edx = edx || {};
var onCertificatesReady = null;

(function($, gettext, _) {
    'use strict';

    edx.instructor_dashboard = edx.instructor_dashboard || {};
    edx.instructor_dashboard.certificates = {};

    onCertificatesReady = function() {
        /**
         * Show a confirmation message before letting staff members
         * enable/disable self-generated certificates for a course.
         */
        $('#enable-certificates-form').on('submit', function( event ) {
            var isEnabled = $('#certificates-enabled').val() === 'true',
                confirmMessage = '';

            if ( isEnabled ) {
                confirmMessage = gettext('Allow students to generate certificates for this course?');
            } else {
                confirmMessage = gettext('Prevent students from generating certificates in this course?');
            }

            if ( !confirm( confirmMessage ) ) {
                event.preventDefault();
            }
        });

        /**
         * Refresh the status for example certificate generation
         * by reloading the instructor dashboard.
         */
        $('#refresh-example-certificate-status').on('click', function() {
            window.location.reload();
        });


        /**
         * Start generating certificates for all students.
         */
        var $section = $("section#certificates");
        $section.on('click', '#btn-start-generating-certificates', function(event) {
            if ( !confirm( gettext('Start generating certificates for all students in this course?') ) ) {
                event.preventDefault();
                return;
            }

            var $btn_generating_certs = $(this),$certificate_generation_status = $('.certificate-generation-status');
            var url = $btn_generating_certs.data('endpoint');
            $.ajax({
                type: "POST",
                url: url,
                success: function (data) {
                    $btn_generating_certs.attr('disabled','disabled');
                    $certificate_generation_status.text(data.message);
                },
                error: function(jqXHR, textStatus, errorThrown) {
                    $certificate_generation_status.text(gettext('Error while generating certificates. Please try again.'));
                }
            });
        });

        /**
         * Start regenerating certificates for students.
         */
        $section.on('click', '#btn-start-regenerating-certificates', function(event) {
            if ( !confirm( gettext('Start regenerating certificates for students in this course?') ) ) {
                event.preventDefault();
                return;
            }

            var $btn_regenerating_certs = $(this),
                $certificate_regeneration_status = $('.certificate-regeneration-status'),
                url = $btn_regenerating_certs.data('endpoint');

            $.ajax({
                type: "POST",
                data: $("#certificate-regenerating-form").serializeArray(),
                url: url,
                success: function (data) {
                    $btn_regenerating_certs.attr('disabled','disabled');
                    if(data.success){
                        $certificate_regeneration_status.text(data.message).
                            removeClass('msg-error').addClass('msg-success');
                    }
                    else{
                        $certificate_regeneration_status.text(data.message).
                            removeClass('msg-success').addClass("msg-error");
                    }
                },
                error: function(jqXHR) {
                    try{
                        var response = JSON.parse(jqXHR.responseText);
                        $certificate_regeneration_status.text(gettext(response.message)).
                            removeClass('msg-success').addClass("msg-error");
                    }catch(error){
                        $certificate_regeneration_status.
                            text(gettext('Error while regenerating certificates. Please try again.')).
                            removeClass('msg-success').addClass("msg-error");
                    }
                }
            });
        });
    };

    // Call onCertificatesReady on document.ready event
    $(onCertificatesReady);

    var Certificates = (function() {
        function Certificates($section) {
            $section.data('wrapper', this);
            this.instructor_tasks = new window.InstructorDashboard.util.PendingInstructorTasks($section);
        }

        Certificates.prototype.onClickTitle = function() {
            return this.instructor_tasks.task_poller.start();
        };

        Certificates.prototype.onExit = function() {
            return this.instructor_tasks.task_poller.stop();
        };
        return Certificates;
    })();

    _.defaults(window, {
        InstructorDashboard: {}
    });

    _.defaults(window.InstructorDashboard, {
        sections: {}
    });

    _.defaults(window.InstructorDashboard.sections, {
        Certificates: Certificates
    });

})($, gettext, _);
