<?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.3
	 */

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

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

    $slug = $fs->get_slug();

	$user            = $fs->get_user();
	$affiliate       = $fs->get_affiliate();
	$affiliate_terms = $fs->get_affiliate_terms();

	$plugin_title = $fs->get_plugin_title();
	$module_type  = $fs->is_plugin() ?
        WP_FS__MODULE_TYPE_PLUGIN :
        WP_FS__MODULE_TYPE_THEME ;

	$commission = $affiliate_terms->get_formatted_commission();

    $readonly                      = false;
    $is_affiliate                  = false;
    $is_pending_affiliate          = false;
    $email_address                 = ( is_object( $user ) ?
        $user->email :
        '' );
    $full_name                     = ( is_object( $user ) ?
        $user->get_name() :
        '' );
    $paypal_email_address          = '';
    $domain                        = '';
    $extra_domains                 = array();
    $promotion_method_social_media = false;
    $promotion_method_mobile_apps  = false;
    $statistics_information        = false;
    $promotion_method_description  = false;
    $members_dashboard_login_url   = 'https://members.freemius.com/login/';

    $affiliate_application_data = $fs->get_affiliate_application_data();

    if ( is_object( $affiliate ) ) {
        $is_affiliate = true;

        if ( $affiliate->is_pending() ) {
            $readonly             = 'readonly';
            $is_pending_affiliate = true;

            $paypal_email_address         = $affiliate->paypal_email;
            $domain                       = $affiliate->domain;
            $statistics_information       = $affiliate_application_data['stats_description'];
            $promotion_method_description = $affiliate_application_data['promotion_method_description'];

            if ( ! empty( $affiliate_application_data['additional_domains'] ) ) {
                $extra_domains = $affiliate_application_data['additional_domains'];
            }

            if ( ! empty( $affiliate_application_data['promotion_methods'] ) ) {
                $promotion_methods             = explode( ',', $affiliate_application_data['promotion_methods'] );
                $promotion_method_social_media = in_array( 'social_media', $promotion_methods );
                $promotion_method_mobile_apps  = in_array( 'mobile_apps', $promotion_methods );
            }
        }
    }

    $affiliate_tracking = 30;

    if ( is_object( $affiliate_terms ) ) {
        $affiliate_tracking = ( ! is_null( $affiliate_terms->cookie_days ) ?
            ( $affiliate_terms->cookie_days . '-day' ) :
            fs_text_inline( 'Non-expiring', 'non-expiring', $slug ) );
    }

    $apply_to_become_affiliate_text = fs_text_inline( 'Apply to become an affiliate', 'apply-to-become-an-affiliate', $slug );
?>
<div id="fs_affiliation_content_wrapper" class="wrap">
    <form method="post" action="">
        <div id="poststuff">
            <div class="postbox">
                <div class="inside">
                    <div id="messages">
                        <div id="error_message" class="error" style="display: none">
                            <p><strong></strong></p>
                        </div>
                        <div id="message" class="updated" style="display: none">
                            <p><strong></strong></p>
                        </div>
                        <?php if ( $is_affiliate ) : ?>
                            <?php if ( $affiliate->is_active() ) : ?>
                                <div class="updated">
                                    <p><strong><?php
                                        echo sprintf(
                                            fs_esc_html_inline( "Your affiliate application for %s has been accepted! Log in to your affiliate area at: %s.", 'affiliate-application-accepted', $slug ),
                                            $plugin_title,
                                            sprintf(
                                                '<a href="%s" target="_blank">%s</a>',
                                                $members_dashboard_login_url,
                                                $members_dashboard_login_url
                                            )
                                        );
                                    ?></strong></p>
                                </div>
                            <?php else : ?>
                                    <?php
                                        $message_text = '';

                                        if ( $is_pending_affiliate ) {
                                            $message_text                = fs_text_inline( "Thank you for applying for our affiliate program, we'll review your details during the next 14 days and will get back to you with further information.", 'affiliate-application-thank-you', $slug );
                                            $message_container_class = 'updated';
                                        } else if ( $affiliate->is_suspended() ) {
                                            $message_text                = fs_text_inline( 'Your affiliation account was temporarily suspended.', 'affiliate-account-suspended', $slug );
                                            $message_container_class = 'notice notice-warning';
                                        } else if ( $affiliate->is_rejected() ) {
                                            $message_text                = fs_text_inline( "Thank you for applying for our affiliate program, unfortunately, we've decided at this point to reject your application. Please try again in 30 days.", 'affiliate-application-rejected', $slug );
                                            $message_container_class = 'error';
                                        } else if ( $affiliate->is_blocked() ) {
                                            $message_text                = fs_text_inline( 'Due to violation of our affiliation terms, we decided to temporarily block your affiliation account. If you have any questions, please contact support.', 'affiliate-account-blocked', $slug );
                                            $message_container_class = 'error';
                                        }
                                    ?>
                                    <div class="<?php echo $message_container_class ?>">
                                        <p><strong><?php echo esc_html( $message_text ) ?></strong></p>
                                    </div>
                            <?php endif ?>
                        <?php endif ?>
                    </div>
                    <div class="entry-content">
                        <?php if ( ! $is_affiliate ) : ?>
                            <div id="application_messages_container">
                                <p><?php echo esc_html( sprintf( fs_text_inline( 'Like the %s? Become our ambassador and earn cash ;-)', 'become-an-ambassador', $slug ), $module_type ) ) ?></p>
                                <p><?php echo esc_html( sprintf( fs_text_inline( 'Refer new customers to our %s and earn %s commission on each successful sale you refer!', 'refer-new-customers', $slug ), $module_type, $commission ) ) ?></p>
                            </div>
                        <?php endif ?>
                        <h3><?php fs_esc_html_echo_inline( 'Program Summary', 'program-summary', $slug ) ?></h3>
                        <ul>
                            <li><?php echo esc_html( sprintf( fs_text_inline( '%s commission when a customer purchases a new license.', 'commission-on-new-license-purchase', $slug ), $commission ) ) ?></li>
                            <?php if ( is_object( $affiliate_terms ) && $affiliate_terms->has_renewals_commission() ) : ?>
                                <li><?php echo esc_html( sprintf( fs_text_inline( 'Get commission for automated subscription renewals.', 'renewals-commission', $slug ) ) ) ?></li>
                            <?php endif ?>
                            <?php if ( is_object( $affiliate_terms ) && ( ! $affiliate_terms->is_session_cookie() ) ) : ?>
                                <li><?php echo esc_html( sprintf( fs_text_inline( '%s tracking cookie after the first visit to maximize earnings potential.', 'affiliate-tracking', $slug ), $affiliate_tracking ) ) ?></li>
                            <?php endif ?>
                            <?php if ( is_object( $affiliate_terms ) && $affiliate_terms->has_lifetime_commission() ) : ?>
                                <li><?php fs_esc_html_echo_inline( 'Unlimited commissions.', 'unlimited-commissions', $slug ) ?></li>
                            <?php endif ?>
                            <li><?php echo esc_html( sprintf( fs_text_inline( '%s minimum payout amount.', 'minimum-payout-amount', $slug ), '$100' ) ) ?></li>
                            <li><?php fs_esc_html_echo_inline( 'Payouts are in USD and processed monthly via PayPal.', 'payouts-unit-and-processing', $slug ) ?></li>
                            <li><?php fs_esc_html_echo_inline( 'As we reserve 30 days for potential refunds, we only pay commissions that are older than 30 days.', 'commission-payment', $slug ) ?></li>
                        </ul>
                        <div id="application_form_container" <?php echo ( $is_pending_affiliate ) ? '' : 'style="display: none"' ?>>
                            <h3><?php fs_esc_html_echo_inline( 'Affiliate', 'affiliate', $slug ) ?></h3>
                            <form>
                                <div class="input-container input-container-text">
                                    <label class="input-label"><?php fs_esc_html_echo_inline( 'Email address', 'email-address', $slug ) ?></label>
                                    <input id="email_address" type="text" value="<?php echo esc_attr( $email_address ) ?>" class="regular-text" <?php echo ( $readonly || is_object( $user ) ) ? 'readonly' : '' ?>>
                                </div>
                                <div class="input-container input-container-text">
                                    <label class="input-label"><?php fs_esc_html_echo_inline( 'Full name', 'full-name', $slug ) ?></label>
                                    <input id="full_name" type="text" value="<?php echo esc_attr( $full_name ) ?>" class="regular-text" <?php echo $readonly ?>>
                                </div>
                                <div class="input-container input-container-text">
                                    <label class="input-label"><?php fs_esc_html_echo_inline( 'PayPal account email address', 'paypal-account-email-address', $slug ) ?></label>
                                    <input id="paypal_email" type="text" value="<?php echo esc_attr( $paypal_email_address ) ?>" class="regular-text" <?php echo $readonly ?>>
                                </div>
                                <div class="input-container input-container-text">
                                    <label class="input-label"><?php echo esc_html( sprintf( fs_text_inline( 'Where are you going to promote the %s?', 'domain-field-label', $slug ), $module_type ) ) ?></label>
                                    <input id="domain" type="text" value="<?php echo esc_attr( $domain ) ?>" class="domain regular-text" <?php echo $readonly ?>>
                                    <p class="description"><?php echo esc_html( sprintf( fs_text_inline( 'Enter the domain of your website or other websites from where you plan to promote the %s.', 'domain-field-desc', $slug ), $module_type ) ) ?></p>
                                    <?php if ( ! $is_affiliate ) : ?>
                                        <a id="add_domain" href="#" class="disabled">+ <?php fs_esc_html_echo_inline( 'Add another domain', 'add-another-domain', $slug ) ?>...</a>
                                    <?php endif ?>
                                </div>
                                <div id="extra_domains_container" class="input-container input-container-text" <?php echo $is_pending_affiliate ? '' : 'style="display: none"' ?>>
                                    <label class="input-label"><?php fs_esc_html_echo_inline( 'Extra Domains', 'extra-domain-fields-label', $slug ) ?></label>
                                    <p class="description"><?php fs_esc_html_echo_inline( 'Extra domains where you will be marketing the product from.', 'extra-domain-fields-desc', $slug ) ?></p>
                                    <?php if ( $is_pending_affiliate && ! empty( $extra_domains ) ) : ?>
                                        <?php foreach ( $extra_domains as $extra_domain ) : ?>
                                        <div class="extra-domain-input-container">
                                            <input type="text" value="<?php echo esc_attr( $extra_domain ) ?>" class="domain regular-text" <?php echo $readonly ?>>
                                        </div>
                                        <?php endforeach ?>
                                    <?php endif ?>
                                </div>
                                <div class="input-container">
                                    <label class="input-label"><?php fs_esc_html_echo_inline( 'Promotion methods', 'promotion-methods', $slug ) ?></label>
                                    <div>
                                        <input id="promotion_method_social_media" type="checkbox" <?php checked( $promotion_method_social_media ) ?> <?php disabled( $is_affiliate ) ?>/>
                                        <label for="promotion_method_social_media"><?php fs_esc_html_echo_inline( 'Social media (Facebook, Twitter, etc.)', 'social-media', $slug ) ?></label>
                                    </div>
                                    <div>
                                        <input id="promotion_method_mobile_apps" type="checkbox" <?php checked( $promotion_method_mobile_apps ) ?> <?php disabled( $is_affiliate ) ?>/>
                                        <label for="promotion_method_mobile_apps"><?php fs_esc_html_echo_inline( 'Mobile apps', 'mobile-apps', $slug ) ?></label>
                                    </div>
                                </div>
                                <div class="input-container input-container-text">
                                    <label class="input-label"><nobr><?php fs_esc_html_echo_inline( 'Website, email, and social media statistics (optional)', 'statistics-information-field-label', $slug ) ?></nobr></label>
                                    <textarea id="statistics_information" rows="5" <?php echo $readonly ?> class="regular-text"><?php echo $statistics_information ?></textarea>
                                    <?php if ( ! $is_affiliate ) : ?>
                                        <p class="description"><?php fs_esc_html_echo_inline( 'Please feel free to provide any relevant website or social media statistics, e.g. monthly unique site visits, number of email subscribers, followers, etc. (we will keep this information confidential).', 'statistics-information-field-desc', $slug ) ?></p>
                                    <?php endif ?>
                                </div>
                                <div class="input-container input-container-text">
                                    <label class="input-label"><?php fs_esc_html_echo_inline( 'How will you promote us?', 'promotion-method-desc-field-label', $slug ) ?></label>
                                    <textarea id="promotion_method_description" rows="5" <?php echo $readonly ?> class="regular-text"><?php echo $promotion_method_description ?></textarea>
                                    <?php if ( ! $is_affiliate ) : ?>
                                        <p class="description"><?php echo esc_html( sprintf( fs_text_inline( 'Please provide details on how you intend to promote %s (please be as specific as possible).', 'promotion-method-desc-field-desc', $slug ), $plugin_title ) ) ?></p>
                                    <?php endif ?>
                                </div>
                            </form>
                        </div>
                        <?php if ( ! $is_affiliate ) : ?>
                            <a id="cancel_button" href="#" class="button button-secondary button-cancel" style="display: none"><?php fs_echo_inline( 'Cancel', 'cancel', $slug ) ?></a>
                            <a id="submit_button" class="button button-primary" href="#" style="display: none"><?php echo esc_html( $apply_to_become_affiliate_text ) ?></a>
                            <a id="apply_button" class="button button-primary" href="#"><?php fs_esc_html_echo_inline( 'Become an affiliate', 'become-an-affiliate', $slug ) ?></a>
                        <?php endif ?>
                    </div>
                </div>
            </div>
        </div>
    </form>
    <script type="text/javascript">
        jQuery(function( $ ) {
            var
                $contentWrapper           = $( '#fs_affiliation_content_wrapper' ),
                $socialMedia              = $( '#promotion_method_social_media' ),
                $mobileApps               = $( '#promotion_method_mobile_apps' ),
                $applyButton              = $( '#apply_button' ),
                $submitButton             = $( '#submit_button' ),
                $cancelButton             = $( '#cancel_button' ),
                $applicationFormContainer = $( '#application_form_container' ),
                $errorMessageContainer    = $( '#error_message' ),
                $domain                   = $( '#domain' ),
                $addDomain                = $( '#add_domain' ),
                $extraDomainsContainer    = $( '#extra_domains_container');

            $applyButton.click(function( evt ) {
                evt.preventDefault();

                var $this = $( this );
                $this.hide();

                $applicationFormContainer.show();
                $cancelButton.show();
                $submitButton.show();

                $contentWrapper.find( 'input[type="text"]:first' ).focus();
            });

            $submitButton.click(function( evt ) {
                evt.preventDefault();

                var $this = $( this );

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

                $errorMessageContainer.hide();

                var
                    $emailAddress      = $( '#email_address' ),
                    emailAddress       = null,
                    paypalEmailAddress = $( '#paypal_email' ).val().trim();

                if ( 1 === $emailAddress.length ) {
                    emailAddress = $emailAddress.val().trim();

                    if ( 0 === emailAddress.length ) {
                        showErrorMessage( '<?php fs_echo_inline( 'Email address is required.', 'email-address-is-required', $slug ) ?>' );
                        return;
                    }
                }

                if ( 0 === paypalEmailAddress.length ) {
                    showErrorMessage( '<?php fs_echo_inline( 'PayPal email address is required.', 'paypal-email-address-is-required', $slug ) ?>' );
                    return;
                }

                var
                    $extraDomains = $extraDomainsContainer.find( '.domain' ),
                    domain        = $domain.val().trim().toLowerCase(),
                    extraDomains  = [];

                if ( 0 === domain.length ) {
                    showErrorMessage( '<?php fs_echo_inline( 'Domain is required.', 'domain-is-required', $slug ) ?>' );
                    return;
                } else if ( 'freemius.com' === domain ) {
                    showErrorMessage( '<?php fs_echo_inline( 'Invalid domain', 'invalid-domain', $slug ) ?>' + ' [' + domain + '].' );
                    return;
                }

                if ( $extraDomains.length > 0 ) {
                    var hasError = false;

                    $extraDomains.each(function() {
                        var
                            $this       = $( this ),
                            extraDomain = $this.val().trim().toLowerCase();
                        if ( 0 === extraDomain.length || extraDomain === domain ) {
                            return true;
                        } else if ( 'freemius.com' === extraDomain ) {
                            showErrorMessage( '<?php fs_echo_inline( 'Invalid domain', 'invalid-domain', $slug ) ?>' + ' [' + extraDomain + '].' );
                            hasError = true;
                            return false;
                        }

                        extraDomains.push( extraDomain );
                    });

                    if ( hasError ) {
                        return;
                    }
                }

                var
                    promotionMethods           = [],
                    statisticsInformation      = $( '#statistics_information' ).val(),
                    promotionMethodDescription = $( '#promotion_method_description' ).val();

                if ( $socialMedia.attr( 'checked' ) ) {
                    promotionMethods.push( 'social_media' );
                }

                if ( $mobileApps.attr( 'checked' ) ) {
                    promotionMethods.push( 'mobile_apps' );
                }

                var affiliate = {
                    full_name                   : $( '#full_name' ).val().trim(),
                    paypal_email                : paypalEmailAddress,
                    stats_description           : statisticsInformation,
                    promotion_method_description: promotionMethodDescription
                };

                if ( null !== emailAddress ) {
                    affiliate.email = emailAddress;
                }

                affiliate.domain             = domain;
                affiliate.additional_domains = extraDomains;

                if ( promotionMethods.length > 0 ) {
                    affiliate.promotion_methods = promotionMethods.join( ',' );
                }

                $.ajax({
                    url       : ajaxurl,
                    method    : 'POST',
                    data      : {
                        action   : '<?php echo $fs->get_ajax_action( 'submit_affiliate_application' ) ?>',
                        security : '<?php echo $fs->get_ajax_security( 'submit_affiliate_application' ) ?>',
                        module_id: '<?php echo $fs->get_id() ?>',
                        affiliate: affiliate
                    },
                    beforeSend: function() {
                        $cancelButton.addClass( 'disabled' );
                        $submitButton.addClass( 'disabled' );
                        $submitButton.text( '<?php fs_esc_js_echo_inline( 'Processing', 'processing' ) ?>...' );
                    },
                    success   : function( result ) {
                        if ( result.success ) {
                            location.reload();
                        } else if ( result.error && result.error.length > 0 ) {
                            showErrorMessage( result.error );

                            $cancelButton.removeClass( 'disabled' );
                            $submitButton.removeClass( 'disabled' );
                            $submitButton.text( '<?php echo esc_js( $apply_to_become_affiliate_text ) ?>' )
                        }
                    }
                });
            });

            $cancelButton.click(function( evt ) {
                evt.preventDefault();

                var $this = $( this );

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

                $applicationFormContainer.hide();
                $this.hide();
                $submitButton.hide();

                $applyButton.show();

                window.scrollTo( 0, 0 );
            });

            $domain.on( 'input propertychange', onDomainChange );

            $addDomain.click(function( evt ) {
                evt.preventDefault();

                var
                    $this  = $( this ),
                    domain = $domain.val().trim();

                if ( $this.hasClass( 'disabled' ) || 0 === domain.length ) {
                    return;
                }

                $domain.off( 'input propertychange' );
                $this.addClass( 'disabled' );

                var
                    $extraDomainInputContainer = $( '<div class="extra-domain-input-container"><input type="text" class="domain regular-text"/></div>' ),
                    $extraDomainInput          = $extraDomainInputContainer.find( 'input' ),
                    $removeDomain              = $( '<a href="#" class="remove-domain"><i class="dashicons dashicons-no" title="<?php fs_esc_js_echo_inline( 'Remove', 'remove', $slug ) ?>"></i></a>' );

                $extraDomainInputContainer.append( $removeDomain );

                $extraDomainInput.on( 'input propertychange', onDomainChange );

                $removeDomain.click(function( evt ) {
                    evt.preventDefault();

                    var
                        $extraDomainInputs = $( '.extra-domain-input-container .domain' );

                    if ( 1 === $extraDomainInputs.length )
                        $extraDomainInputs.val( '' ).focus();
                    else
                        $( this ).parent().remove();
                });

                $extraDomainsContainer.show();

                $extraDomainInputContainer.appendTo( $extraDomainsContainer );
                $extraDomainInput.focus();

                $this.appendTo( $extraDomainsContainer );
            });

            /**
             * @author Leo Fajardo (@leorw)
             */
            function onDomainChange() {
                var
                    domain = $( this ).val().trim();

                if ( domain.length > 0 ) {
                    $addDomain.removeClass( 'disabled' );
                } else {
                    $addDomain.addClass( 'disabled' );
                }
            }

            /**
             * @author Leo Fajardo (@leorw)
             *
             * @param {String} message
             */
            function showErrorMessage( message ) {
                $errorMessageContainer.find( 'strong' ).text( message );
                $errorMessageContainer.show();

                window.scrollTo( 0, 0 );
            }
        });
    </script>
</div>
<?php
    $params = array(
        'page'           => 'affiliation',
        'module_id'      => $fs->get_id(),
        'module_slug'    => $slug,
        'module_version' => $fs->get_plugin_version(),
    );
    fs_require_template( 'powered-by.php', $params );
?>