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).addClass('message');
                    } else {
                        $certificate_regeneration_status.text(data.message).addClass('message');
                    }
                },
                error: function(jqXHR) {
                    try {
                        var response = JSON.parse(jqXHR.responseText);
                        $certificate_regeneration_status.text(gettext(response.message)).addClass('message');
                    } catch (error) {
                        $certificate_regeneration_status.
                            text(gettext('Error while regenerating certificates. Please try again.')).
                            addClass('message');
                    }
                }
            });
        });
    };

    // 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, _));