/**
  * @param string $event
  * @param array  $properties
  *
  * @internal param array $data
  */
 public function track($event, $properties = [])
 {
     $browserInfo = new Browser();
     $osInfo = new Os();
     $deviceInfo = new Device();
     $browserVersion = trim(str_replace('unknown', '', $browserInfo->getName() . ' ' . $browserInfo->getVersion()));
     $osVersion = trim(str_replace('unknown', '', $osInfo->getName() . ' ' . $osInfo->getVersion()));
     $hardwareVersion = trim(str_replace('unknown', '', $deviceInfo->getName()));
     $data = ['Url' => $this->request->getUri(), 'Operating System' => $osVersion, 'Hardware' => $hardwareVersion, '$browser' => $browserVersion, 'Referrer' => $this->request->header('referer'), '$referring_domain' => $this->request->header('referer') ? parse_url($this->request->header('referer'))['host'] : null, 'ip' => $this->request->ip()];
     $data = array_filter($data);
     $properties = array_filter($properties);
     if (!array_key_exists('$browser', $data) && $browserInfo->isRobot()) {
         $data['$browser'] = 'Robot';
     }
     parent::track($event, $data + $properties);
 }
 /**
  *
  * @param BrowserDetector\Browser $browserRaw
  * @param BrowserDetector\Os      $osRaw
  * @param BrowserDetector\Device  $deviceRaw
  *
  * @return boolean
  */
 private function hasResult(BrowserDetector\Browser $browserRaw, BrowserDetector\Os $osRaw, BrowserDetector\Device $deviceRaw)
 {
     if ($this->isRealResult($browserRaw->getName())) {
         return true;
     }
     if ($this->isRealResult($osRaw->getName())) {
         return true;
     }
     if ($this->isRealResult($deviceRaw->getName(), 'device', 'model')) {
         return true;
     }
     if ($browserRaw->isRobot() === true) {
         return true;
     }
     return false;
 }