<?php
/**
 * @package Crisp
 * @version 0.20
Plugin Name: Crisp
Plugin URI: http://wordpress.org/plugins/crisp/
Description: Crisp is a Livechat plugin
Author: Crisp IM
Version: 0.20
Author URI: https://crisp.chat
*/

add_action('admin_menu', 'crisp_create_menu');

function crisp_create_menu() {
  add_menu_page('Crisp Settings', 'Crisp Settings', 'administrator', __FILE__, 'crisp_plugin_settings_page' , 'https://crisp.chat/favicon.png');
  add_action('admin_init', 'register_crisp_plugin_settings' );
  add_action('admin_init', 'register_crisp_plugin_onboarding');
}

function register_crisp_plugin_onboarding() {
  $onboarding = get_option('crisp_onboarding');
  $website_id = get_option('website_id');

  if (empty($website_id) && (empty($onboarding) || !$onboarding)) {
    update_option("crisp_onboarding", true);
    wp_redirect(admin_url('admin.php?page='.plugin_basename(__FILE__)));
  }
}

function register_crisp_plugin_settings() {
  register_setting( 'crisp-plugin-settings-group', 'website_id' );
  add_option('crisp_onboarding', false);
}

function crisp_plugin_settings_page() {
  if (isset($_GET["crisp_website_id"]) && !empty($_GET["crisp_website_id"])) {
    update_option("website_id", $_GET["crisp_website_id"]);
  }

  if (isset($_GET["crisp_verify"]) && !empty($_GET["crisp_verify"])) {
    update_option("website_verify", $_GET["crisp_verify"]);
  }

  $website_id = get_option('website_id');
  $is_crisp_working = isset($website_id) && !empty($website_id);
  $http_callback = "http" . (($_SERVER['SERVER_PORT'] == 443) ? "s://" : "://") . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
  $add_to_crisp_link = "https://app.crisp.chat/initiate/plugin/aca0046c-356c-428f-8eeb-063014c6a278?payload=$http_callback";
?>

<link rel="stylesheet" href="<?php echo plugins_url("assets/style.css", __FILE__ );?>">
  <?php
  if ($is_crisp_working) {
  ?>

  <div class="wrap crisp-wrap">
    <div class="crisp-modal">
      <h2 class="crisp-title">Connected with Crisp.</h2>
      <p class="crisp-subtitle">You can now use Crisp from your homepage.</p>
      <a class="crisp-button crisp-neutral" href="https://app.crisp.chat/settings/website/<?php echo $website_id ?>">Go to my Crisp settings</a>

      <a class="crisp-button crisp" href="https://app.crisp.chat/website/<?php echo $website_id ?>/inbox/">Go to my Inbox</a>

      <a class="crisp-button crisp-neutral" href="<?php echo $add_to_crisp_link; ?>">Reconfigure</a>

      
    </div>

    <p class="crisp-notice">Loving Crisp <b style='color:red'>♥</b> ? Rate us on the <a target="_blank" href="https://wordpress.org/support/plugin/crisp/reviews/?filter=5">Wordpress Plugin Directory</a></p>
  </div>

  <?php
  } else {
  ?>
  <div class="wrap crisp-wrap">
    <div class="crisp-modal">
      <h2 class="crisp-title">Connect with Crisp.</h2>
      <p class="crisp-subtitle">This link will redirect you to Crisp and configure your Wordpress. Magic</p>
      <a class="crisp-button crisp" href="<?php echo $add_to_crisp_link; ?>">Connect with Crisp</a>
    </div>
  </div>
  <?php
  }
}

add_action('wp_head', 'crisp_hook_head', 1);

function crisp_sync_wordpress_user() {
  $output = "";


  if (is_user_logged_in()) {
    $current_user = wp_get_current_user();
  }

  if (!isset($current_user)) {
    return "";
  }

  $website_verify = get_option('website_verify');

  $email = $current_user->user_email;
  $nickname = $current_user->display_name;

  if (!empty($email) && empty($website_verify)) {
    $output .= '$crisp.push(["set", "user:email", "' . $email . '"]);';
  } else if (!empty($email)) {
    $hmac = hash_hmac("sha256", $email, $website_verify);
    $output .= '$crisp.push(["set", "user:email", ["' . $email . '", "' . $hmac . '"]]);';
  }

  if (!empty($nickname)) {
    $output .= '$crisp.push(["set", "user:nickname", "' . $nickname . '"]);';
  }

  return $output;
}

function crisp_sync_woocommerce_customer() {
  $output = "";
  if (!class_exists("WooCommerce") || is_admin()) {
    return $output;
  }

  $customer = WC()->session->get("customer");

  if ($customer == NULL) {
    return $output;
  }

  if (isset($customer["phone"]) && !empty($customer["phone"])) {
    $output .= '$crisp.push(["set", "user:phone", "' . $customer["phone"] . '"]);';
  }

  $nickname = "";

  if (isset($customer["first_name"]) && !empty($customer["first_name"])) {
    $nickname = $customer["first_name"];
  }
  if (isset($customer["last_name"]) && !empty($customer["last_name"])) {
    $nickname .= " ".$customer["last_name"];
  }

  if (!empty($nickname)) {
    $output .= '$crisp.push(["set", "user:nickname", "' . $nickname . '"]);';
  }

  $data = array();
  $data_keys = array(
    "company",
    "address",
    "address_1",
    "address_2",
    "postcode",
    "state",
    "country",
    "shipping_company",
    "shipping_address",
    "shipping_address_1",
    "shipping_address_2",
    "shipping_state",
    "shipping_country",
  );

  foreach ($data_keys as $key) {
    if (isset($customer[$key]) && !empty($customer[$key])) {
      $data[] = '["'. $key . '", "' . $customer[$key] . '"]';
    }
  }

  if (count($data) > 0) {
    $output .= '$crisp.push(["set", "session:data", [[' . implode(",", $data) . ']]]);';
  }

  return $output;
}

function crisp_hook_head() {
  $website_id = get_option('website_id');

  if (!isset($website_id) || empty($website_id)) {
    return;
  }

  $output="<script data-cfasync='false'>
    window.\$crisp=[];
    CRISP_WEBSITE_ID = '$website_id';";


  $output .= "(function(){
      d=document;s=d.createElement('script');
      s.src='https://client.crisp.chat/l.js';
      s.async=1;d.getElementsByTagName('head')[0].appendChild(s);
    })();";

  $output .= crisp_sync_wordpress_user();
  $output .= crisp_sync_woocommerce_customer();

  $output .= "</script>";
  
  echo $output;
}

?>
