/**
  * @param TrackingEvent $trackingEvent
  * @param array         $decodedData
  *
  * @return TrackingVisit
  */
 protected function getTrackingVisit(TrackingEvent $trackingEvent, $decodedData)
 {
     $visitorUid = $decodedData['_id'];
     $userIdentifier = $trackingEvent->getUserIdentifier();
     $hash = md5($visitorUid . $userIdentifier);
     // try to find existing visit
     if (!empty($this->collectedVisits) && array_key_exists($hash, $this->collectedVisits)) {
         $visit = $this->collectedVisits[$hash];
     } else {
         $visit = $this->doctrine->getRepository(self::TRACKING_VISIT_ENTITY)->findOneBy(['visitorUid' => $visitorUid, 'userIdentifier' => $trackingEvent->getUserIdentifier(), 'trackingWebsite' => $trackingEvent->getWebsite()]);
     }
     if (!$visit) {
         $visit = new TrackingVisit();
         $visit->setParsedUID(0);
         $visit->setParsingCount(0);
         $visit->setUserIdentifier($trackingEvent->getUserIdentifier());
         $visit->setVisitorUid($visitorUid);
         $visit->setFirstActionTime($trackingEvent->getCreatedAt());
         $visit->setLastActionTime($trackingEvent->getCreatedAt());
         $visit->setTrackingWebsite($trackingEvent->getWebsite());
         $visit->setIdentifierDetected(false);
         if (!empty($decodedData['cip'])) {
             $visit->setIp($decodedData['cip']);
         }
         if (!empty($decodedData['ua'])) {
             $this->processUserAgentString($visit, $decodedData['ua']);
         }
         $this->identifyTrackingVisit($visit);
         $this->collectedVisits[$hash] = $visit;
     } else {
         if ($visit->getFirstActionTime() > $trackingEvent->getCreatedAt()) {
             $visit->setFirstActionTime($trackingEvent->getCreatedAt());
         }
         if ($visit->getLastActionTime() < $trackingEvent->getCreatedAt()) {
             $visit->setLastActionTime($trackingEvent->getCreatedAt());
         }
     }
     return $visit;
 }