<?php
/**
 * @package     Freemius
 * @copyright   Copyright (c) 2015, Freemius, Inc.
 * @license     https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3
 * @since       1.2.0
 */

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

/**
 * @var array $VARS
 * @var Freemius $fs
 */
$fs = freemius( $VARS['id'] );

$slug = $fs->get_slug();

$send_button_text          = fs_text( 'send-license-key', $slug );
$cancel_button_text        = fs_text( 'cancel', $slug );
$email_address_placeholder = fs_esc_attr( 'email-address', $slug );
$other_text                = fs_text( 'reason-other', $slug );

$is_freemium = $fs->is_freemium();

$send_button_text_html = esc_html( $send_button_text );

$button_html = <<< HTML
<div class="button-container">
    <a href="#" class="button button-primary button-send-license-key" tabindex="2">{$send_button_text_html}</a>
</div>
HTML;

if ( $is_freemium ) {
	$current_user = Freemius::_get_current_wp_user();
	$email        = $current_user->user_email;
	$esc_email    = esc_attr( $email );
	$form_html    = <<< HTML
<div class="email-address-container">
    <label><input name="email-address" type="radio" checked="checked" tabindex="1" value="{$esc_email}"> {$email}</label>
    <label><input name="email-address" type="radio" tabindex="1" value="other">{$other_text}: <input class="email-address" type="text" placeholder="{$email_address_placeholder}"></label>
</div>
{$button_html}
HTML;
} else {
	$email     = '';
	$form_html = <<< HTML
{$button_html}
<div class="email-address-container">
    <input class="email-address" type="text" placeholder="{$email_address_placeholder}" tabindex="1">
</div>
HTML;
}

$message_above_input_field = esc_html( fs_text( 'ask-for-upgrade-email-address', $slug ) );
$modal_content_html        = <<< HTML
    <div class="notice notice-error inline license-resend-message"><p></p></div>
    <p>{$message_above_input_field}</p>
    <div class="input-container">
        {$form_html}
    </div>
HTML;

fs_enqueue_local_style( 'fs_dialog_boxes', '/admin/dialog-boxes.css' );
?>
<script type="text/javascript">
    (function ($) {
        $(document).ready(function () {
            var contentHtml = <?php echo json_encode( $modal_content_html ); ?>,
                modalHtml =
                    '<div class="fs-modal fs-modal-license-key-resend <?php echo $is_freemium ? 'fs-freemium' : 'fs-premium' ?>">'
                    + ' <div class="fs-modal-dialog">'
                    + '     <div class="fs-modal-header">'
                    + '         <h4><?php echo esc_js( $send_button_text ) ?></h4>'
                    + '         <a href="#!" class="fs-close" tabindex="3" title="Close"><i class="dashicons dashicons-no" title="<?php fs_esc_js_echo( 'dismiss', $slug ) ?>"></i></a>'
                    + '     </div>'
                    + '     <div class="fs-modal-body">'
                    + '         <div class="fs-modal-panel active">' + contentHtml + '</div>'
                    + '     </div>'
                    + ' </div>'
                    + '</div>',
                $modal = $(modalHtml),
                $sendButton = $modal.find('.button-send-license-key'),
                $emailInput = $modal.find('input.email-address'),
                $feedbackMessage = $modal.find('.license-resend-message'),
                isFreemium = <?php echo json_encode( $is_freemium ) ?>,
                userEmail = <?php echo json_encode( $email ) ?>,
                moduleID = '<?php echo $fs->get_id() ?>',
                isChild = false;


            $modal.appendTo($('body'));

            function registerEventHandlers() {
                $('a.show-license-resend-modal-<?php echo $fs->get_unique_affix() ?>').click(function (evt) {
                    evt.preventDefault();

                    showModal();
                });

                if (isFreemium) {
                    $modal.on('change', 'input[type=radio][name=email-address]', function () {
                        updateButtonState();
                    });

                    $modal.on('focus', 'input.email-address', function () {
                        // Check custom email radio button on email input focus.
                        $($modal.find('input[type=radio]')[1]).prop('checked', true);

                        updateButtonState();
                    });
                }

                $modal.on('input propertychange', 'input.email-address', function () {
                    updateButtonState();
                });

                $modal.on('blur', 'input.email-address', function () {
                    updateButtonState();
                });

                $modal.on('click', '.fs-close', function () {
                    closeModal();
                    return false;
                });

                $modal.on('click', '.button', function (evt) {
                    evt.preventDefault();

                    if ($(this).hasClass('disabled')) {
                        return;
                    }

                    var email = getEmail();

                    disableButton();

                    if (!(-1 < email.indexOf('@'))) {
                        return;
                    }

                    $.ajax({
                        url: ajaxurl,
                        method: 'POST',
                        data: {
                            action: '<?php echo $fs->get_ajax_action( 'resend_license_key' ) ?>',
                            security: '<?php echo $fs->get_ajax_security( 'resend_license_key' ) ?>',
                            module_id: moduleID,
                            email: email
                        },
                        beforeSend: function () {
                            $sendButton.text(<?php fs_json_encode_echo( 'sending-license-key', $slug ) ?> +'...');
                        },
                        success: function (result) {
                            var resultObj = $.parseJSON(result);
                            if (resultObj.success) {
                                closeModal();
                            } else {
                                showError(resultObj.error);
                                resetButton();
                            }
                        }
                    });
                });
            }

            registerEventHandlers();

            resetButton();

            function showModal() {
                resetModal();

                // Display the dialog box.
                $modal.addClass('active');

                if (!isFreemium)
                    $emailInput.focus();

                var $body = $('body');

                isChild = $body.hasClass('has-fs-modal');
                if (isChild) {
                    return;
                }

                $body.addClass('has-fs-modal');
            }

            function closeModal() {
                $modal.removeClass('active');

                // If child modal, do not remove the "has-fs-modal" class of the <body> element to keep its scrollbars hidden.
                if (isChild) {
                    return;
                }

                $('body').removeClass('has-fs-modal');
            }

            function resetButton() {
                updateButtonState();
                $sendButton.text(<?php echo json_encode( $send_button_text ) ?>);
            }

            function resetModal() {
                hideError();
                resetButton();
                $emailInput.val('');
            }

            function getEmail() {
                var email = $emailInput.val().trim();

                if (isFreemium) {
                    if ('other' != $modal.find('input[type=radio][name=email-address]:checked').val()) {
                        email = userEmail;
                    }
                }

                return email;
            }

            function updateButtonState() {
                /**
                 * If email address is not empty, enable the send license key button.
                 */
                $sendButton.toggleClass('disabled', !( -1 < getEmail().indexOf('@') ));
            }

            function disableButton() {
                $sendButton.addClass('disabled');
            }

            function hideError() {
                $feedbackMessage.hide();
            }

            function showError(msg) {
                $feedbackMessage.find(' > p').html(msg);
                $feedbackMessage.show();
            }
        });
    })(jQuery);
</script>
