<?php 
/**
 * Create adtelligent supply (vast tag) for all arb campaigns
 * 
 * @author Amit Agrahari
 * 07/04/2019
 */
#$baseUrl = "/var/www/php56/amit/msacommon/trunk/";
$baseUrl = '';
include_once $baseUrl.'lib/php/include/db.php';
include_once $baseUrl.'lib/php/api/adtelligent/adtelligent.php';
include_once $baseUrl.'lib/php/include/encrypt.php';
include_once 'link_supply_to_demand.php';
define('HASH_KEY', 'JhYoSkfdqO1hdD3');
//get all active demand
function updateDemandInDB(){
    global $error_msg_string;
    $db = ConnectToAdmin();
    
    $obj = new Adtelligent();
    $obj->getDemandListing();
    if(!empty($obj->error)){
        $error_msg_string[] = "Error getting demand listing: ".print_r($obj->error, true);
    }else {
        //print_r($obj);
        $all_demand = $obj->_api_response['data'];
        //force update on every odd hour to pull updates to existing demand
        if(date('H')%2 == 0){
            //update when the count changes.
            $count_in_db = 0;
            $sql = "SELECT count(*) as c from adtelligent_demand";
            $res = mysql_query($sql, $db);
            while ($row = mysql_fetch_array($res)){
                $count_in_db  = $row['c'];
            }
            
            if(count($all_demand) === $count_in_db){
                println("Same demand count in db. Nothing to update.");
                return;
            }
        }
        
        foreach ($all_demand as $d){
            $id = $d['id'];
            $obj = new Adtelligent();
            $obj->getDemandDetails(array('id'=>$id));
            if(!empty($obj->error)){
                println("Error getting demand details for $id");
            }
            else{
                //print_r($obj->_api_response['data']);
                $name = $d['name'];
                $active = $d['enabled'];
		$environments = $obj->_api_response['data']['environments'];
                $is_mobile_web = (in_array(932,$environments)) ? 1 : 0;
                $is_mobile_app = (in_array(933,$environments)) ? 1 : 0;
                $is_desktop = (in_array(931,$environments)) ? 1 : 0;
                
                $sql = "INSERT INTO `adtelligent_demand`(`id`, `name`, `active`, `is_mobile_web`, `is_mobile_app`, `is_desktop`)
                    VALUES ($id, '$name', $active, $is_mobile_web, $is_mobile_app, $is_desktop )
                    ON DUPLICATE KEY UPDATE name='$name', active=$active, is_mobile_web=$is_mobile_web, is_mobile_app=$is_mobile_app, is_desktop=$is_desktop";
		//die("stop here!");
                if(!mysql_query($sql, $db)){
                    $error_msg_string[] = " Error adding demand to table: $sql ".mysql_error();
                }
            }
            if($d['enabled'] == 1){
                $assigned_vasts[] = array('is_active_on_player'=>1,'useDefaultCPM'=>'true','vastId'=>$d['id'], 'vast_cpm_on_player'=>null);
            }
        }
    }
}

function createAdtelligentSupplyForArbCampaings(){
    global $error_msg_string;
    $db = ConnectToAdmin();

    //get demand to map from the db
    $demand_arr = getDemand();
    $assigned_vasts = $demand_arr['non_premium'];
    $premium_demand = $demand_arr['premium'];
    if(!is_array($assigned_vasts)){
        $error_msg_string[] = "Could not get assigned vasts from the db";
        return false;
    }

    //get campaings without existing adtelligent id
    $sql = "SELECT * FROM `campaign` c, campaign_targeting d where advertiser_id=8144 and status='A' and name not like '%novideo%' and c.id=d.campaign_id  and description not in (SELECT aid FROM `rep_aid_adtelligent_map`) ";
    $res = mysql_query($sql, $db);
    while ($row = mysql_fetch_assoc($res)){
        $campaign_id = $row['id'];
        $aid = $row['description'];
        $name = $row['name'];
        $json = $row['json'];
        $targeting = json_decode($json);

        $is_300x250 = false;
        //check the creative size
        $sql = "SELECT * from creatives where id in (SELECT creative_id from campaign_creative_link where campaign_id=$campaign_id)";
        $cr_res = mysql_query($sql, $db);
        while ($cr_row = mysql_fetch_assoc($cr_res)){
            if($cr_row['img_width'] == 300 && $cr_row['img_height'] == 250){
                $is_300x250 = true;
            }
        }
        $is_desktop = $is_mobile_web = $is_mobile_app = 0;

        if(is_array($targeting->supplies)){
            if(in_array("web", $targeting->supplies) && in_array("mobile", $targeting->supplies) && in_array("app", $targeting->supplies)){
                $env_tag = "_ALLDEVICES";
                $is_desktop = $is_mobile_web = 1;
            }
            elseif(in_array("mobile", $targeting->supplies) && in_array("app", $targeting->supplies)){
                $env_tag = "_MOBILE";
                $is_mobile_web = $is_mobile_app = 1;
            }
            elseif(count($targeting->supplies) > 1){    //web && {mobile|app}
                $env_tag = "_ALLDEVICES";
                $is_desktop = $is_mobile_web = 1;
            }
            else if($targeting->supplies[0] == "web"){
                $env_tag = "_DESKTOP";
                $is_desktop = 1;
            }
            else if($targeting->supplies[0]=="app"){
                $env_tag = "_MAPP";
                $is_mobile_app = 1;
            }
            else{
                $env_tag = "_MWEB";
                $is_mobile_web = 1;
            }
        }
        else{
            $env_tag = "_ALLDEVICES";
            $is_desktop = $is_mobile_web = 1;
        }
	if(is_array($targeting->countries)){
            if(count($targeting->countries) <= 2 && in_array("USA", $targeting->countries)){ //US | US,CA
                $geo_tag = "_US";
            }
            elseif(count($targeting->countries) > 2 && !in_array("USA", $targeting->countries)){    //all but US
                $geo_tag = "_INTL";
            }
            else{
                $geo_tag = "_ALLGEOS";
            }
        }
        else{
            $geo_tag = "_ALLGEOS";
        }

        $supply_name = "IBV_C:{$campaign_id}_A:{$aid}{$env_tag}{$geo_tag}";

        if($env_tag == "_ALLDEVICES"){
            $arr_key = 'all_devives';
        }
        elseif($env_tag == "_DESKTOP"){
            $arr_key = 'desktop';
        }
        elseif($env_tag == "_MWEB"){
            $arr_key = 'mobile_web';
        }
        else{
            $arr_key = 'mobile_app';
        }

	if($is_300x250 && isset($premium_demand[$arr_key]) && count($premium_demand[$arr_key])>0){
            //assign premium demand
            $demand_ids = array_merge($premium_demand[$arr_key], $assigned_vasts[$arr_key]);
        }
        else{
            $demand_ids = $assigned_vasts[$arr_key];
        }
	$environments = array();
	if( $is_desktop == 1 ) {
	    $environments[] = 931;
	}
	if( $is_mobile_web == 1 ) {
            $environments[] = 932;
        }
	if( $is_mobile_app == 1 ) {
            $environments[] = 933;
        }

	$input = array(
    		'name' => $supply_name,
    		'enabled' => true,
    		'environments' => $environments,
    		'tag_type' => 940,
    		'pricing_type' => 'revshare',
    		'revshare' => 50,
    		'player_size_filter_type' => 'white',
		'passback_connection' => true
	 );
	$adtelligent_id = create_adtelligent_supply($aid, $input);

        if(!($adtelligent_id > 0)){
            $error_msg_string[] = "Error creating adtelligent id for $supply_name";
        }
        else{
	    $demands = array_map(function ($ar) {return $ar['vastId'];}, $demand_ids);
	    $getRes = linkSupplyTODemand($adtelligent_id, $environments, $demands);
	    if($getRes == false ) {
		println("$name ====> $supply_name not Created: $adtelligent_id");	
	    }
    	    $tag = "http://v.admedia.com/?id=".encrypt_str($aid)."&page_url=[ENCODED_PAGE_URL]&content=[CONTENT_CODE]&title=[VIDEO_TITLE]&video_id=[VIDEO_ID]&width=[WIDTH]&height=[HEIGHT]";
	    if($aid > 0){
	        $spotx_sql = "aff_id=$aid, ron=0,";
	    }
	    else
	        $spotx_sql = "";
	    $insert_sql = "insert into rep_vastTags set 
	    name='$supply_name',
	    advertiser_name='$supply_name',
	    tag='$tag',
	    $spotx_sql
	    enabled=1,
	    type=3";
	    $res = mysql_query($insert_sql);
	    if($res){
        	print "Tag $supply_name as been added";
	    } else {
	        print "Tag $supply_name failed";
	    }

	    println("$name ====> $supply_name Created successfully: $adtelligent_id");
        }

        if(rand(0,1) == 1){
            sleep(1);
        }
    }
}

function getDemand(){
    global $error_msg_string;
    $assigned_vasts = array();
    $premium_vasts = array();
    $db = ConnectToAdmin();
    $sql = "SELECT * FROM `adtelligent_demand` where active=1";
    $res = mysql_query($sql, $db);
    if(mysql_num_rows($res) == 0){
        $error_msg_string[] = "Empty results from adtelligent_demand";
        return false;
    }
    while ($row = mysql_fetch_array($res)){
        if($row['is_desktop'] == 1){
            //desktop demand
            if($row['premium'] == 1){
                $premium_vasts['desktop'][] = array('is_active_on_player'=>1,'useDefaultCPM'=>'true','vastId'=>$row['id'], 'vast_cpm_on_player'=>null);
            }
            else{
                $assigned_vasts['desktop'][] = array('is_active_on_player'=>1,'useDefaultCPM'=>'true','vastId'=>$row['id'], 'vast_cpm_on_player'=>null);
            }
        }
        if($row['is_mobile_web'] == 1){
            if($row['premium'] == 1){
                $premium_vasts['mobile_web'][] = array('is_active_on_player'=>1,'useDefaultCPM'=>'true','vastId'=>$row['id'], 'vast_cpm_on_player'=>null);
            }
            else{
                $assigned_vasts['mobile_web'][] = array('is_active_on_player'=>1,'useDefaultCPM'=>'true','vastId'=>$row['id'], 'vast_cpm_on_player'=>null);
            }
        }
        if($row['is_mobile_app'] == 1){
            if($row['premium'] == 1){
                $premium_vasts['mobile_app'][] = array('is_active_on_player'=>1,'useDefaultCPM'=>'true','vastId'=>$row['id'], 'vast_cpm_on_player'=>null);
            }
            else{
                $assigned_vasts['mobile_app'][] = array('is_active_on_player'=>1,'useDefaultCPM'=>'true','vastId'=>$row['id'], 'vast_cpm_on_player'=>null);
            }
        }
        
        $assigned_vasts['all_devives'][] = array('is_active_on_player'=>1,'useDefaultCPM'=>'true','vastId'=>$row['id'], 'vast_cpm_on_player'=>null);
    }
    return array("non_premium"=>$assigned_vasts, "premium"=>$premium_vasts);
}

function create_adtelligent_supply($aid, $input){
    global $error_msg_string;
    $db = ConnectToAdmin();
    $obj = new Adtelligent();
    $obj->createSupply($input);
    if(!empty($obj->error)){
       $error_msg_string[] = "Error creating supply for $aid : ".print_r($obj->error, true);
    }else {
        //print_r($obj->_api_response);
        $adtelligent_id = $obj->_api_response['data']['id'];
        if($adtelligent_id > 0){
            $name = addslashes($input['name']);
            $type = $input['tag_type'];
            $sql = "INSERT INTO `rep_aid_adtelligent_map`(`aid`, `adtelligent_id`, `name`, `type`) VALUES ($aid, $adtelligent_id, '$name', '$type')";
            if(!mysql_query($sql, $db)){
                $error_msg_string[] = "Error updating adtelligent id $sql ".mysql_error();
                echo "Error updating adtelligent id $sql ".mysql_error();
            }
            return $adtelligent_id;
        }
    }
    
   return 0;
}

function println ($string_message) {
    isset($_SERVER['SERVER_PROTOCOL']) ? print "$string_message<br />" : print "$string_message\n";
}

?>

