public function adsProcess()
 {
     $startProcess = microtime(1);
     $this->layout = null;
     $response = null;
     $responseType = '';
     $expandFields = array();
     $deliveryStatus = '';
     $requestType = Input::get('rt', Delivery::REQUEST_TYPE_AD);
     $flightWebsiteID = Input::get('fpid', '');
     $zoneID = Input::get('zid', 0);
     $websiteID = Input::get('wid', 0);
     $platform = Input::get('plf', '');
     $tag = Input::get('tag', '');
     $data = Input::all();
     $trackingModel = new Tracking();
     $deliveryModel = new Delivery();
     $isOverReport = $data['ovr'] = false;
     $showBanner = showBanner();
     if ($showBanner !== FALSE) {
         $flightWebsiteID = $showBanner;
     }
     //$uuid = $trackingModel->getVisitorId();
     //ghi log ad request
     (new RawTrackingAdRequest())->addAdRequest($websiteID, $zoneID);
     // if($continueProcess){
     //check pre process
     $hostReferer = $trackingModel->getRequestReferer();
     $responseType = $trackingModel->checkPreProcess($requestType, $hostReferer, $zoneID);
     //pre validate ok
     if (empty($responseType)) {
         //read redis 1
         $data['ref'] = $hostReferer;
         $adZone = $deliveryModel->getAdzone($zoneID);
         if ($adZone && !empty($adZone->site)) {
             $expandFields['ad_format_id'] = $adZone->ad_format_id;
             if ($adZone->publisher_site_id == $websiteID) {
                 //kiểm tra referrer đúng với site đã đăng ký
                 // if(1){//test only
                 $publisherSite = $deliveryModel->getPublisherSite($adZone->publisher_site_id);
                 pr($publisherSite);
                 $domainCheck = isset($publisherSite->domain_checking) ? $publisherSite->domain_checking : 1;
                 if (!$domainCheck || isSameDomain($hostReferer, getWebDomain($adZone->site->url)) || isLocal()) {
                     //    if ($platform == '') {
                     //     $platform = $deliveryModel->getPlatform();
                     // }
                     $platform = '';
                     //read redis 1
                     $flightWebsites = $deliveryModel->getAvailableAds($adZone->publisher_site_id, $adZone->ad_format_id, $flightWebsiteID, $platform);
                     if ($flightWebsites) {
                         //lấy ad từ list thỏa điều kiện để trả về
                         $deliveryInfo = $deliveryModel->getFullFlightInfo($flightWebsites, $adZone->publisher_site_id, $adZone->ad_format_id);
                         //random array flight website, priority flight audience
                         $flightWebsites = $deliveryModel->sortAvailableFlightWebsites($flightWebsites, $deliveryInfo);
                         pr($flightWebsites);
                         pr($deliveryInfo);
                         $redis = new RedisBaseModel(env('REDIS_HOST', '127.0.0.1'), env('REDIS_PORT_6', '6379'), false);
                         foreach ($flightWebsites as $k => $flightWebsite) {
                             if (!empty($flightWebsite) && !empty($deliveryInfo['flightDates'][$flightWebsite->flight_id]) && !empty($deliveryInfo['flights'][$flightWebsite->flight_id])) {
                                 $flightDates = $deliveryInfo['flightDates'][$flightWebsite->flight_id];
                                 $flight = $deliveryInfo['flights'][$flightWebsite->flight_id];
                                 $ad = $deliveryInfo['ads'][$flight->ad_id];
                                 if ($deliveryModel->checkPlatform($ad) === TRUE || isLocal()) {
                                     $checkFlightDate = $deliveryModel->checkFlightDate($flightDates, $flight);
                                     //flight date ok
                                     if ($checkFlightDate) {
                                         $deliveryStatus = $deliveryModel->deliveryAd($ad, $flightWebsite, $flight, $flightDates);
                                         if ($deliveryStatus == Delivery::DELIVERY_STATUS_OK || $deliveryStatus == Delivery::DELIVERY_STATUS_OVER_REPORT) {
                                             if (empty($data['ec']) && !empty($ad->vast_include) && !empty($ad->video_wrapper_tag)) {
                                                 $xmlVastTag = $this->getVastAdTagUri($ad->id, $this->replaceParam($ad->video_wrapper_tag));
                                                 if (empty($xmlVastTag)) {
                                                     continue;
                                                 }
                                             }
                                             if (!empty($flight->filter)) {
                                                 if (!$deliveryModel->checkTag($flight->filter, urldecode($tag))) {
                                                     $deliveryStatus = Delivery::TAG_TYPE_INVALID;
                                                     continue;
                                                 }
                                             }
                                             //Check retargeting
                                             if (!empty($flight->audience)) {
                                                 $check = false;
                                                 $audience = json_decode($flight->audience, true);
                                                 if (!empty($audience['audience_id'])) {
                                                     if (isset($_COOKIE["yoAu_{$audience['audience_id']}"]) && !empty($_COOKIE["uuid"])) {
                                                         if ($_COOKIE["yoAu_{$audience['audience_id']}"] === '1' || substr($_COOKIE["yoAu_{$audience['audience_id']}"], 0, 2) === '1.') {
                                                             $check = true;
                                                         }
                                                     }
                                                     if ($audience['operator'] === 'not in') {
                                                         $check = !$check;
                                                     }
                                                 }
                                                 if ($check === false) {
                                                     $deliveryStatus = Delivery::RESPONSE_TYPE_AUDIENCE_LIMIT;
                                                     continue;
                                                 }
                                             }
                                             //trả về ad này
                                             pr($flightWebsite);
                                             $serveAd = $ad;
                                             $data['ad'] = $ad;
                                             $data['aid'] = $ad->id;
                                             $data['fpid'] = $flightWebsite->id;
                                             $data['flight'] = $flight;
                                             //over report
                                             if ($deliveryStatus == Delivery::DELIVERY_STATUS_OVER_REPORT) {
                                                 $data['ovr'] = $isOverReport = true;
                                             }
                                             $responseType = Delivery::RESPONSE_TYPE_ADS_SUCCESS;
                                             break;
                                         }
                                     } else {
                                         $deliveryStatus = Delivery::RESPONSE_TYPE_FLIGHTDATE_NOT_AVAILABLE;
                                     }
                                 } else {
                                     $deliveryStatus = Delivery::PLATFORM_TYPE_INVALID;
                                 }
                             }
                         }
                         //endforeach
                     }
                     //no ads available
                     if ($responseType != Delivery::RESPONSE_TYPE_ADS_SUCCESS) {
                         $responseType = Delivery::RESPONSE_TYPE_NOT_AVAILABLE;
                     }
                 } else {
                     $responseType = Delivery::RESPONSE_TYPE_REFERRER_NOT_MATCH;
                 }
             }
         }
     }
     // }
     //invalid ads request
     $bLogAdsSuccess = false;
     if (empty($responseType)) {
         $responseType = Delivery::RESPONSE_TYPE_INVALID;
     } elseif ($responseType == Delivery::RESPONSE_TYPE_ADS_SUCCESS) {
         $bLogAdsSuccess = true;
         $expandFields = array('flight_id' => $flightWebsite->flight_id, 'ad_format_id' => $adZone->ad_format_id, 'ad_id' => $flight->ad_id, 'campaign_id' => $flight->campaign_id, 'publisher_ad_zone_id' => $adZone->id, 'flight_website_id' => $flightWebsite->id, 'website_id' => $flightWebsite->website_id, 'publisher_base_cost' => $flightWebsite->publisher_base_cost);
         if ($isOverReport) {
             $expandFields['ovr'] = 1;
         }
         $expandFields['checksum'] = $checksum = $trackingModel->makeChecksumHash($flightWebsite->id);
         $eventChecksum = Delivery::RESPONSE_TYPE_ADS_SUCCESS;
         $trackingModel->setChecksumTrackingEvent($checksum, Delivery::RESPONSE_TYPE_ADS_SUCCESS);
     }
     $data['url_track_ga'] = $deliveryModel->getUrlTrack3rd($data);
     //serve Ad
     // if(0){
     if (!empty($serveAd)) {
         \View::addLocation(base_path() . '/resources/views/delivery');
         if (isset($data['ec'])) {
             if ($data['ec'] == 1) {
                 $data['checksum'] = $expandFields['checksum'];
                 $data['element_id'] = isset($adZone->element_id) ? $adZone->element_id : '';
                 $data['category_name'] = '';
                 $adFormat = $deliveryModel->getAdFormat($data['ad']->ad_format_id);
                 if (empty($data['flight']->category_id)) {
                     $campaign = $deliveryModel->getCampaign($data['flight']->campaign_id);
                     if (!empty($campaign)) {
                         $category = $deliveryModel->getCategory($campaign->category_id);
                         $data['category_name'] = isset($category->name) ? str_replace(' ', '_', strtolower($category->name)) : '';
                     }
                 } else {
                     $category = $deliveryModel->getCategory($data['flight']->category_id);
                     if (!empty($category)) {
                         $data['category_name'] = isset($category->name) ? str_replace(' ', '_', strtolower($category->name)) : '';
                     }
                 }
                 $data['flight_name'] = isset($data['flight']->name) ? str_replace(' ', '_', $data['flight']->name) : '';
                 $data['ad_format'] = isset($adFormat->name) ? str_replace(' ', '_', $adFormat->name) : '';
                 $data['publisher_domain'] = $hostReferer;
                 $data['rd'] = str_random(40);
                 $this->data['data'] = $data;
                 $data['type'] = $serveAd->ad_view ? $serveAd->ad_view : strtolower($data['type']);
                 if (Input::get('test') == 1) {
                     return response(\View::make($data['type'], $this->data), 200)->header('Content-Type', 'text/javascript; charset=UTF-8');
                 } else {
                     $response = response(\View::make($data['type'], $this->data), 200)->header('Content-Type', 'text/javascript; charset=UTF-8');
                 }
             } else {
                 $response = (new VAST())->makeVAST($data['aid'], $data['fpid'], $data['zid'], $expandFields['checksum'], $isOverReport);
             }
         }
     } else {
         //TO DO : return backup ads
         if (!empty($adZone)) {
             $adZone->alternateAds = !empty($adZone->alternateAds) ? $adZone->alternateAds : $deliveryModel->getAlternateAds($adZone->id);
             if (isset($adZone) && !empty($adZone->alternateAds)) {
                 if (isset($data['ec']) && !$data['ec']) {
                     // TO DO : return backup vast
                     shuffle($adZone->alternateAds);
                     $firstBackup = array_shift($adZone->alternateAds);
                     $response = (new VAST())->makeBackupVast($adZone->id, $firstBackup->code);
                 } else {
                     $this->data['listAlternateAd'] = $adZone->alternateAds;
                     $this->data['zid'] = $adZone->id;
                     $this->data['data']['url_track_ga'] = $data['url_track_ga'];
                     \View::addLocation(base_path() . '/resources/views/delivery');
                     $response = response(\View::make('rotator', $this->data), 200)->header('Content-Type', 'text/javascript; charset=UTF-8');
                 }
             } else {
                 if (isset($data['ec']) && !$data['ec']) {
                     $response = (new VAST())->makeEmptyVast();
                 } else {
                     $this->data['data']['url_track_ga'] = $data['url_track_ga'];
                     \View::addLocation(base_path() . '/resources/views/delivery');
                     $response = response(\View::make('url_track_ga', $this->data), 200)->header('Content-Type', 'text/javascript; charset=UTF-8');
                 }
             }
             (new RawTrackingSummary())->addSummaryRequestEmptyAd($adZone->id, $adZone->ad_format_id, $websiteID, $isOverReport);
         }
     }
     //ghi log ad success
     if ($bLogAdsSuccess) {
         (new RawTrackingSummary())->addSummary('ads_request', $flightWebsite->website_id, $adZone->id, $adZone->ad_format_id, $flightWebsite->flight_id, $flightWebsite->id, $flight->ad_id, $flight->campaign_id, $flightWebsite->publisher_base_cost, $isOverReport);
     }
     //response to client
     $endProcess = microtime(1);
     pr("Times: " . ($endProcess - $startProcess));
     pr($deliveryStatus);
     pr($responseType, 1);
     return $response;
 }