<?php

/**
 * Shipment tracking for Isotope eCommerce
 *
 * Copyright (c) 2017 Benjamin Roth
 *
 * @license commercial
 */

namespace eSM_isotope_shipmenttracking\Hooks;

use eSM_isotope_shipmenttracking\Model\ShipmentTrackingModel;

class IsotopeHooks extends \Controller
{
  public function getOrderNotificationTokens($Order, $arrTokens)
  {
    $arrTokens['shipmenttracking_shipping_annotation'] = nl2br($Order->shipping_annotation);
    $arrTokens['shipmenttracking_shipping_annotation_text'] = $Order->shipping_annotation;

    if (!$Order->shipping_tracking)
    {
      return $arrTokens;
    }

    $Tracking = ShipmentTrackingModel::findByPk($Order->shipping_tracking);

    if ($Tracking === null)
    {
      return $arrTokens;
    }

    $strTrackingNumber = trim($Order->tracking_number);
    $strUrl = $this->replacePlaceholders($Tracking->trackingUrl,array('%%TRACKINGNO%%'=>$strTrackingNumber));
    $strShippingdate = \Date::parse(\Date::getNumericDateFormat(),$Order->date_shipped);
    $strShippingInfo = sprintf($GLOBALS['TL_LANG']['iso_shipmenttracking']['shippingdate_info_today'],$Order->date_shipped,$Tracking->name);
    if (date('Ymd',$Order->date_shipped) < date('Ymd'))
    {
      $strShippingInfo = sprintf($GLOBALS['TL_LANG']['iso_shipmenttracking']['shippingdate_info_past'],$Order->date_shipped,$Tracking->name);
    } else if (date('Ymd',$Order->date_shipped) > date('Ymd')) {
      $strShippingInfo = sprintf($GLOBALS['TL_LANG']['iso_shipmenttracking']['shippingdate_info_future'],$Order->date_shipped,$Tracking->name);
    }

    $arrTokens['shipmenttracking_number'] = $strTrackingNumber;
    $arrTokens['shipmenttracking_url'] = $strUrl;
    $arrTokens['shipmenttracking_shippingdate'] = $strShippingdate;
    $arrTokens['shipmenttracking_shipping_info'] = $strShippingInfo;
    $arrTokens['shipmenttracking_note'] = $this->replacePlaceholders($Tracking->note,array('%%TRACKINGNO%%'=>$strTrackingNumber,'%%TRACKINGURL%%'=>$strUrl, '%%SHIPPINGDATE%%'=>$strShippingdate, '%%SHIPPINGINFO%%'=>$strShippingInfo));
    $arrTokens['shipmenttracking_note_text'] = strip_tags(str_ireplace(array('</p>','</ p>',),"\n\n",str_ireplace(array('<br>','<br />','</ br>','</br>'),"\n",str_replace(array("\r\n","\r","\n","\\r","\\n","\\r\\n"),"",$arrTokens['shipmenttracking_note']))));

    return $arrTokens;
  }

  /**
   * Replace placeholders
   *
   * @param $strString
   * @return string
   */
  protected function replacePlaceholders($strString, $arrReplace)
  {
    // Split placeholders
    $arrPlaceholders = preg_split('/(%%[^%]+%%)/', $strString, -1, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);

    // Replace placeholders
    foreach ($arrPlaceholders as $placeholder)
    {
      if (isset($arrReplace[$placeholder]))
      {
        $strString = str_ireplace($placeholder,$arrReplace[$placeholder],$strString);
      }
    }

    return $strString;
  }
}