<?php
/**
 * @file
 * Functions to support extended Google Analytics data.
 *
 * @author Tom McCracken <tomm@getlevelten.com>
 */

/**
 * Returns imapi client
 *
 * @param $vars
 * @param array $options
 * @return bool|\LevelTen\Intel\ApiClient
 * @throws \Exception
 */
function intel_imapi_get_client(&$vars, $options = array()) {
  $vars['tid'] = isset($options['tid']) ? $options['tid'] : get_option('intel_ga_tid', '');
  $vars['viewid'] = isset($options['viewid']) ? $options['viewid'] : get_option('intel_ga_view', '');
  if (empty($vars['tid'])) {
    $message = Intel_Df::t('Tracking id is not set.');
    throw new Exception($message);
    return FALSE;
  }
  $vars['apikey'] = isset($options['apikey']) ? $options['apikey'] : get_option('intel_apikey', '');
  if (empty($vars['apikey'])) {
    $message = Intel_Df::t('API key is not set');
    throw new Exception($message);
    return FALSE;
  }
  intel_include_library_file('class.apiclient.php');

  $apiUrl = get_option('intel_imapi_url', '');
  $api_params = get_option('intel_imapi_custom_params', array());
  $apiClientProps = array(
    'apiUrl' => ($apiUrl ? $apiUrl : INTEL_IMAPI_URL) . '/',
    'urlrewrite' => 1,
    //'apiConnector' => get_option('intel_l10iapi_connector', ''),
    'apiParams' => $api_params,
  );

  $apiclient = new \LevelTen\Intel\ApiClient($apiClientProps);

  return $apiclient;
}

function intel_imapi_ga_goal_get($goal_id = 0, $options = array()) {

  $vars = array();
  $apiclient = intel_imapi_get_client($vars);

  $response = FALSE;
  $params = isset($options['params']) ? $options['params'] : array();
  $params['tid'] = $vars['tid'];
  $params['viewid'] = $vars['viewid'];
  $data = array(
    'apikey' => $vars['apikey'],
  );
  if ($goal_id) {
    $params['goal_id'] = $goal_id;
  }

  try {
    $response = $apiclient->getJSON('ga_goal/get', $params, $data);
  }
  catch (Exception $e) {
    throw($e);
  }

  return $response['ga_goal'];
}

function intel_imapi_ga_goal_insert($ga_goal, $options = array()) {

  $apiclient = intel_imapi_get_client($vars);

  $response = FALSE;
  $params = isset($options['params']) ? $options['params'] : array();
  $params['tid'] = $vars['tid'];
  $params['viewid'] = $vars['viewid'];
  $data = array(
    'apikey' => $vars['apikey'],
    'ga_goal' => $ga_goal,
  );

  try {
    $response = $apiclient->getJSON('ga_goal/insert', $params, $data);
  }
  catch (Exception $e) {
    throw($e);
  }
  //delay calls to GA by 200ms
  usleep(200000);
  return $response;
}

function intel_imapi_ga_goal_update($ga_goal, $options = array()) {

  $apiclient = intel_imapi_get_client($vars);

  $response = FALSE;
  $params = isset($options['params']) ? $options['params'] : array();
  $params['tid'] = $vars['tid'];
  $params['viewid'] = $vars['viewid'];
  $data = array(
    'apikey' => $vars['apikey'],
    'ga_goal' => $ga_goal,
  );

  try {
    $response = $apiclient->getJSON('ga_goal/update', $params, $data);
  }
  catch (Exception $e) {
    throw($e);
  }
  //delay calls to GA by 200ms
  usleep(200000);
  return $response;
}

function intel_imapi_ga_custom_dimension_get($custom_dimension_id = 0, $options = array()) {

  $vars = array();
  $apiclient = intel_imapi_get_client($vars);

  $response = FALSE;
  $params = isset($options['params']) ? $options['params'] : array();
  $params['tid'] = $vars['tid'];
  $params['viewid'] = $vars['viewid'];
  $data = array(
    'apikey' => $vars['apikey'],
  );
  if ($custom_dimension_id) {
    $params['custom_dimension_id'] = $custom_dimension_id;
  }

  try {
    $response = $apiclient->getJSON('ga_custom_dimension/get', $params, $data);
  }
  catch (Exception $e) {
    throw($e);
  }

  return $response['ga_custom_dimension'];
}

function intel_imapi_ga_custom_metric_get($custom_metric_id = 0, $options = array()) {

  $vars = array();
  $apiclient = intel_imapi_get_client($vars);

  $response = FALSE;
  $params = isset($options['params']) ? $options['params'] : array();
  $params['tid'] = $vars['tid'];
  $params['viewid'] = $vars['viewid'];
  $data = array(
    'apikey' => $vars['apikey'],
  );
  if ($custom_metric_id) {
    $params['custom_metric_id'] = $custom_metric_id;
  }

  try {
    $response = $apiclient->getJSON('ga_custom_metric/get', $params, $data);
  }
  catch (Exception $e) {
    throw($e);
  }

  return $response['ga_custom_metric'];
}



