<?php
/* @var $global DUP_PRO_Global_Entity */
defined("ABSPATH") or die("");

use Duplicator\Addons\ProBase\License\License;

DUP_PRO_U::hasCapability('manage_options');

$global  = DUP_PRO_Global_Entity::get_instance();
$sglobal = DUP_PRO_Secure_Global_Entity::getInstance();

$nonce_action                = 'duppro-settings-licensing-edit';
$error_response              = null;
$action_response             = null;
$license_activation_response = null;
$is_localhost                = strstr($_SERVER['HTTP_HOST'], 'localhost');

//SAVE RESULTS
if (isset($_POST['action'])) {
    $action = sanitize_text_field($_POST['action']);
    switch ($action) {
        case 'activate':
            DUP_PRO_U::verifyNonce($_POST['_wpnonce'], 'duplicator-pro-licence');

            /**
             * If license isn't visible input is always disabled
             */
            if ($global->license_key_visible) {
                $submitted_license_key = trim($_REQUEST['_license_key']);
            } else {
                $submitted_license_key = get_option(License::LICENSE_KEY_OPTION_NAME);
            }

            if (License::isValidOvrKey($submitted_license_key)) {
                License::setOvrKey($submitted_license_key);
            } else {
                if (preg_match('/^[a-f0-9]{32}$/i', $submitted_license_key)) {
                    update_option(License::LICENSE_KEY_OPTION_NAME, $submitted_license_key);
                    $license_activation_response = License::changeLicenseActivation(true);

                    switch ($license_activation_response) {
                        case License::ACTIVATION_RESPONSE_OK:
                            $action_response = DUP_PRO_U::__("License Activated");
                            break;
                        case License::ACTIVATION_RESPONSE_POST_ERROR:
                            $error_response = sprintf(
                                DUP_PRO_U::__("Cannot communicate with snapcreek.com. Please see <a target='_blank' href='%s'>this FAQ entry</a> for possible causes and resolutions."),
                                'https://snapcreek.com/duplicator/docs/faqs-tech/#faq-licensing-005-q'
                            );
                            break;
                        case License::ACTIVATION_RESPONSE_INVALID:
                        default:
                            $error_response = DUP_PRO_U::__('Error activating license.');
                            break;
                    }
                } else {
                    $error_response = DUP_PRO_U::__('Please enter a valid key. Key should be 32 characters long.');
                }
            }
            break;

        case 'deactivate':
        case 'clear_key':
            DUP_PRO_U::verifyNonce($_POST['_wpnonce'], 'duplicator-pro-licence');
            if (License::isValidOvrKey(License::getLicenseKey())) {
                // Reset license key otherwise will be artificially stuck on as valid
                update_option(License::LICENSE_KEY_OPTION_NAME, '');
            } else {
                $license_activation_response = License::changeLicenseActivation(false);

                switch ($license_activation_response) {
                    case License::ACTIVATION_RESPONSE_OK:
                        $action_response = DUP_PRO_U::__("License Deactivated");
                        break;

                    case License::ACTIVATION_RESPONSE_POST_ERROR:
                        $error_response = sprintf(
                            DUP_PRO_U::__("Cannot communicate with snapcreek.com. Please see <a target='_blank' href='%s'>this FAQ entry</a> for possible causes and resolutions."),
                            'https://snapcreek.com/duplicator/docs/faqs-tech/#faq-licensing-005-q'
                        );
                        break;

                    case License::ACTIVATION_RESPONSE_INVALID:
                    default:
                        $error_response = DUP_PRO_U::__('Error deactivating license.');
                        break;
                }
            }


            if ($action == 'clear_key') {
                update_option(License::LICENSE_KEY_OPTION_NAME, '');

                $global->license_key_visible = true;
                $sglobal->lkp                = '';

                $global->save();
                $sglobal->save();
            }



            break;

        case 'hide_key':
            DUP_PRO_U::verifyNonce($_POST['_wpnonce'], 'duplicator-pro-licence');

            $password              = sanitize_text_field($_POST['_key_password']);
            $password_confirmation = sanitize_text_field($_POST['_key_password_confirmation']);

            if (empty($password)) {
                $error_response = DUP_PRO_U::__('Password cannot be empty.');
            } else {
                if ($password == $password_confirmation) {
                    $global->license_key_visible = false;
                    $sglobal->lkp                = $password;
                    $global->save();
                    $sglobal->save();
                    $action_response             = DUP_PRO_U::__("Key now hidden.");
                } else {
                    $error_response = DUP_PRO_U::__("Passwords don't match.");
                }
            }
            break;

        case 'show_key':
            DUP_PRO_U::verifyNonce($_POST['_wpnonce'], 'duplicator-pro-licence');
            $password = sanitize_text_field($_POST['_key_password']);

            if ($password == $sglobal->lkp) {
                $global->license_key_visible = true;
                $sglobal->lkp                = '';

                $global->save();
                $sglobal->save();

                $action_response = DUP_PRO_U::__("Key now visible.");
            } else {
                $error_response = DUP_PRO_U::__("Wrong password entered. Key remains hidden.");
            }

            break;
    }
}

$license_status          = License::getLicenseStatus(true);
$license_text_disabled   = false;
$activate_button_text    = DUP_PRO_U::__('Activate');
$license_status_text_alt = '';

if ($license_status == License::STATUS_VALID) {
    $license_status_style  = 'color:#509B18';
    $activate_button_text  = DUP_PRO_U::__('Deactivate');
    $license_text_disabled = true;

    $license_key           = License::getLicenseKey();

    if (License::isValidOvrKey($license_key)) {
        $standard_key        = License::getStandardKeyFromOvrKey($license_key);
        $license_status_text = DUP_PRO_U::__("Status: Active (Using license override for key {$standard_key})");
    } else {
        $license_status_text = DUP_PRO_U::__('Status: Active');
        $license_status_text .= '<br/>';
        $license_status_text .= DUP_PRO_U::__('Expiration: ');
        $license_status_text .= License::getExpirationDate(get_option('date_format'));
        $expDays = License::getExpirationDays();
        if ($expDays == 0) {
            $expDays = __('expired', 'duplicator-pro');
        } elseif ($expDays == PHP_INT_MAX) {
            $expDays = __('no expiration', 'duplicator-pro');
        } else {
            $expDays = $expDays . ' ' . DUP_PRO_U::__('days left');
        }
        $license_status_text .= ' (<b>' . $expDays . '</b>)';
    }

    //INACTIVE
} elseif (($license_status == License::STATUS_INACTIVE)) {
    $license_status_style = 'color:#dd3d36;';
    $license_status_text  = DUP_PRO_U::__('Status: Inactive');

    //SITE-INACTIVE
} elseif ($license_status == License::STATUS_SITE_INACTIVE) {
    $license_status_style = 'color:#dd3d36;';
    $global               = DUP_PRO_Global_Entity::get_instance();
    $license_status_text  = ($global->license_no_activations_left) ? DUP_PRO_U::__('Status: Inactive (out of site licenses).<br/> Please use the link above to login to your snapcreek.com dashboard to manage your licenses.') : DUP_PRO_U::__('Status: Inactive');

    //EXPIRED
} elseif ($license_status == License::STATUS_EXPIRED) {
    $renewal_url          = 'https://snapcreek.com/checkout?edd_license_key=' . License::getLicenseKey();
    $license_status_style = 'color:#dd3d36;';
    $license_status_text  = sprintf('Your Duplicator Pro license key has expired so you aren\'t getting important updates! <a target="_blank" href="%1$s">Renew your license now</a>', $renewal_url);

    //DEFAULT
} else {
    $license_status_string   = License::getLicenseStatusString($license_status);
    $license_status_style    = 'color:#dd3d36;';
    $license_status_text     = DUP_PRO_U::__('Status: ') . $license_status_string . '<br/>';
    $license_status_text_alt = DUP_PRO_U::__('If license activation fails please wait a few minutes and retry.');
    $license_status_text_alt .= '<div class="dup-license-status-notes ">';
    $license_status_text_alt .= sprintf(
        DUP_PRO_U::__('- Failure to activate after several attempts please review %1$sfaq activation steps%2$s'),
        '<a target="_blank" href="https://snapcreek.com/duplicator/docs/faqs-tech/#faq-licensing-005-q">',
        '</a>.<br/>'
    );
    $license_status_text_alt .= sprintf(DUP_PRO_U::__('- To upgrade or renew your license visit %1$ssnapcreek.com%2$s'), '<a target="_blank" href="https://snapcreek.com">', '</a>.</div>');
}

function DUP_PRO_Type_Viewer($opts)
{
    $opts['mu1'] = '<i class="far fa-check-square"></i>  ';
    $opts['mu2'] = $opts['mu2'] == 1 ? '<i class="far fa-check-square"></i>  ' : '<i class="far fa-square"></i>  ';

    $txt_lic_hdr = DUP_PRO_U::__('Site Licenses');
    $txt_lic_msg = DUP_PRO_U::__('Number of site licenses indicates the number of sites the plugin can be active on at any one time. At any point you may deactivate/uninstall the plugin to free up the license and use the plugin elsewhere if needed.');
    $txt_mu1_hdr = DUP_PRO_U::__('Multisite Basic');
    $txt_mu1_msg = DUP_PRO_U::__('Can backup & migrate standalone sites and full multisite networks.');
    $txt_mu2_hdr = DUP_PRO_U::__('Multisite Plus+');
    $txt_mu2_msg = DUP_PRO_U::__('Ability to install a subsite as a standalone site. Additional subsite features are planned for Multisite Plus+ in the future.  This option is only available in Business and Gold.');

    //ARRAY:
    echo '<div>';
    echo "<i class='far fa-check-square'></i>  {$txt_lic_hdr} ({$opts['lic']}) <i class='fa fa-question-circle' data-tooltip-title='{$txt_lic_hdr}' data-tooltip='{$txt_lic_msg}'></i><br/>";
    echo $opts['mu1'] . "{$txt_mu1_hdr} <i class='fa fa-question-circle' data-tooltip-title='{$txt_mu1_hdr}' data-tooltip='{$txt_mu1_msg}'></i><br/>";
    echo $opts['mu2'] . "{$txt_mu2_hdr} <i class='fa fa-question-circle' data-tooltip-title='{$txt_mu2_hdr}' data-tooltip='{$txt_mu2_msg}'></i><br/>";
    echo '</div>';
}

?>

<form id="dup-settings-form" action="<?php echo self_admin_url('admin.php?page=' . DUP_PRO_Constants::$SETTINGS_SUBMENU_SLUG); ?>" method="post" data-parsley-validate>
    <?php // wp_nonce_field($nonce_action);
    ?>
    <input type="hidden" name="action" value="save" id="action">
    <input type="hidden" name="page" value="<?php echo DUP_PRO_Constants::$SETTINGS_SUBMENU_SLUG ?>">
    <input type="hidden" name="tab" value="licensing">

    <?php if ($action_response != null) : ?>
        <div class="notice notice-success is-dismissible dpro-wpnotice-box">
            <p><?php echo $action_response; ?></p>
        </div>
    <?php endif; ?>

    <?php if ($error_response != null) : ?>
        <div class="notice notice-error is-dismissible dpro-wpnotice-box">
            <p><?php echo $error_response; ?></p>
        </div>
    <?php endif; ?>

    <h3 class="title"><?php DUP_PRO_U::esc_html_e("Activation") ?> </h3>
    <hr size="1" />
    <table class="form-table">
        <tr valign="top">
            <th scope="row"><?php DUP_PRO_U::esc_html_e("Manage") ?></th>
            <td><?php echo sprintf(DUP_PRO_U::__('%1$sManage/Upgrade Licenses%2$s'), '<a target="_blank" href="https://snapcreek.com/dashboard">', '</a>'); ?></td>
        </tr>
        <tr valign="top">
            <th scope="row"><?php DUP_PRO_U::esc_html_e("Type") ?></th>
            <td class="dpro-license-type">
                <?php
                $license = License::getType();
                $global  = DUP_PRO_Global_Entity::get_instance();

                switch ($license) {
                    case License::TYPE_PERSONAL:
                        DUP_PRO_U::esc_html_e("Personal");
                        DUP_PRO_Type_Viewer(array('mu2' => 0, 'lic' => $global->license_limit));
                        break;
                    case License::TYPE_FREELANCER:
                        DUP_PRO_U::esc_html_e("Freelancer");
                        DUP_PRO_Type_Viewer(array('mu2' => 0, 'lic' => $global->license_limit));
                        break;
                    case License::TYPE_BUSINESS_GOLD:
                        DUP_PRO_U::esc_html_e("Business/Gold");
                        DUP_PRO_Type_Viewer(array('mu2' => 1, 'lic' => 'Unlimited'));
                        break;
                    default:
                        DUP_PRO_U::esc_html_e("Unlicensed");
                }
                ?>
            </td>
        </tr>
        <tr valign="top">
            <th scope="row"><label><?php DUP_PRO_U::esc_html_e("License Key"); ?></label></th>
            <td>
                <input type="<?php echo $global->license_key_visible ? 'text' : 'password'; ?>" class="wide-input" name="_license_key" id="_license_key" <?php DUP_PRO_UI::echoDisabled($license_text_disabled || !$global->license_key_visible); ?> value="<?php echo $global->license_key_visible ? License::getLicenseKey() : '**********************'; ?>" />
                <br />
                <p class="description">
                    <?php
                    echo "<span style='$license_status_style'>$license_status_text</span>";
                    echo $license_status_text_alt;
                    ?>
                </p>
                <br /><br />
                <button class="button" onclick="DupPro.Licensing.ChangeActivationStatus(<?php echo (($license_status != License::STATUS_VALID) ? 'true' : 'false'); ?>);return false;"><?php echo $activate_button_text; ?></button>

                <button class="button" onclick="DupPro.Licensing.ClearActivationStatus();return false;"><?php DUP_PRO_U::esc_html_e("Clear Key") ?></button>
            </td>
        </tr>
    </table>

    <h3 class="title"><?php DUP_PRO_U::esc_html_e("Key Visibility") ?> </h3>
    <small>
        <?php
        DUP_PRO_U::esc_html_e("This is an optional setting that prevents the 'License Key' from being copied.  Enter a password and hit the 'Hide Key' button.");
        echo '<br/>';
        DUP_PRO_U::esc_html_e("To show the 'License Key' and allow for it to be copied to your clipboard enter in the password and hit the 'Show Key' button.");
        ?>
    </small>
    <hr size="1" />
    <table class="form-table">
        <tr valign="top">
            <th scope="row"><label><?php DUP_PRO_U::esc_html_e("Password"); ?></label></th>
            <td>
                <input type="password" class="wide-input" name="_key_password" id="_key_password" size="50" />
            </td>
        </tr>
        <tr style="display:<?php echo $global->license_key_visible ? 'table-row' : 'none'; ?>" valign="top">
            <th scope="row"><label><?php DUP_PRO_U::esc_html_e("Retype Password"); ?></label></th>
            <td>
                <input type="password" class="wide-input" name="_key_password_confirmation" id="_key_password_confirmation" data-parsley-equalto="#_key_password" size="50" />
            </td>
        </tr>
        <tr valign="top">
            <th scope="row"></th>
            <td>
                <?php
                wp_nonce_field('duplicator-pro-licence');
                ?>
                <button class="button" id="show_hide" onclick="DupPro.Licensing.ChangeKeyVisibility(<?php DUP_PRO_UI::echoBoolean(!$global->license_key_visible); ?>); return false;">
                    <?php echo $global->license_key_visible ? DUP_PRO_U::__('Hide Key') : DUP_PRO_U::__('Show Key'); ?></button>
            </td>
        </tr>
    </table>
</form>

<script>
    jQuery(document).ready(function($) {
        DupPro.Licensing = new Object();

        // Ensure if they hit enter in one of the password boxes the correct action takes place
        $("#_key_password, #_key_password_confirmation").keyup(function(event) {

            if (event.keyCode == 13) {
                $("#show_hide").click();
            }
        });

        DupPro.Licensing.ChangeActivationStatus = function(activate) {
            if (activate) {
                $('#action').val('activate');
            } else {
                $('#action').val('deactivate');
            }
            $('#dup-settings-form').submit();
        }

        DupPro.Licensing.ClearActivationStatus = function() {
            $('#action').val('clear_key');
            $('#dup-settings-form').submit();
        }

        DupPro.Licensing.ChangeKeyVisibility = function(show) {
            if (show) {
                $('#action').val('show_key');
            } else {
                $('#action').val('hide_key');
            }
            $('#dup-settings-form').submit();
        }
    });
</script>