<?php
define("TFDirectory", "/www/zPhplib/TF2/201806");
set_include_path(__DIR__.':'.TFDirectory);

require_once('Teras.php');


function get_browser_name($user_agent)
{
    if (strpos($user_agent, 'Opera') || strpos($user_agent, 'OPR/')) return 'Opera';
    elseif (strpos($user_agent, 'Edge')) return 'Edge';
    elseif (strpos($user_agent, 'Chrome')) return 'Chrome';
    elseif (strpos($user_agent, 'Safari')) return 'Safari';
    elseif (strpos($user_agent, 'Firefox')) return 'Firefox';
    elseif (strpos($user_agent, 'MSIE') || strpos($user_agent, 'Trident/7')) return 'Internet Explorer';
    
    return 'Other';
}

$browser = get_browser(null, true);
//print_r($browser);
$data .= "HTTP_USER_AGENT: ". $_SERVER['HTTP_USER_AGENT']."\n\r";
$data .= "BROWSER: ". get_browser_name($_SERVER['HTTP_USER_AGENT'])."\n\r";
$data .= "BROWSER: ". $browser['browser_name_pattern']."\n\r";
$data .= "PLATFORM: ". $browser['platform']."\n\r";
$data .= "DEVICE: ". $browser['device_type']."\n\r";
$data .="\n\r\n\rDATA\n\r";
foreach($_REQUEST as $key=>$value)
$data .= $key.": ". $value."\n\r";

$data .= "\n\r\n\rGIORNO: ".date("Y-m-d H:i:s")."\n\r";


/* VARIABILI */
$config = [
    'societa' => 'sicp',
    'mezzo' => 105,
    'sezione' => 25,
    'adapter' => 'bm',
    'database' => 'bm_limmsy_sicp',
    'table' => 'online',
    'shopLogin' => 9111561,
    'email' => 'sicp@biomedia.net',
    'url_rinnovo' => 'https://limmsy.biomedia.net/sicp-tesoreria',
    'url_nuovo' => 'https://limmsy.biomedia.net/sicp-diventasocio'
];
//$societa = $config['societa'];

/* PRODUZIONE */
//$shopLogin = $config['shopLogin'];
$urlWS = "https://ecomms2s.sella.it/gestpay/gestpayws/WSCryptDecrypt.asmx?WSDL";

$a = $_REQUEST["a"];
$b = $_REQUEST["b"];


$vue = new \Teras\Vue();
$vue->_request = array_merge ($_REQUEST, (array)  json_decode(file_get_contents('php://input'),true));
$vue->init();

$vue->_request['from'] = $config['email'];
$vue->_request['to'] = 'mirko@terasmm.it';

$vue->_request['oggetto'] = 'Sella '.$config['societa'].': inizio della procedura di ritorno';
$vue->_request['body'] = "Iniziata la procedura di ritorno:<br />A is ".$a."<br />b is ".$b."<br /><br />";
$vue->_request['body'] .= "<br /><br />_request:<pre>".file_get_contents('php://input')."</pre>";
$vue->email();

$vue->_request['url'] = $urlWS;
$vue->_request['action'] = 'Decrypt';
$vue->_request['args'] = ['shopLogin' => $config['shopLogin'],'CryptedString' => $b];
$vue->sella();
$sella = $vue->_data('result');

$TransactionResult = $sella->TransactionResult;
$ShopTransactionID = $sella->ShopTransactionID;

if(isset($_REQUEST['test'])){
    $TransactionResult = 'OK';
    $ShopTransactionID = $_REQUEST['test'];    
}

if($TransactionResult=="OK"){

    foreach(explode("*P1*",$sella->CustomInfo) AS $CustomInfo){
        list($key, $value) = explode("=",$CustomInfo);
        $terasInfo[$key]=$value;
    }

    $vue->_request['oggetto'] = 'Sella '.$config['societa'].': TransactionResult is OK con TERAS_MOTIVO = '.$terasInfo['TERAS_MOTIVO'];
    $vue->_request['body'] = "Iniziata la procedura di ritorno:<pre>".file_get_contents('php://input')."</pre>";
    $vue->_request['body'] .= "<br />CustmInfo:<pre>".$sella->CustomInfo."</pre>";
    $vue->email();

    $online = new \Teras\Db();
    $online->_request = array_merge (array('adapter'=>$config['adapter'],'database'=>$config['database'],'primary'=>'id','table'=>$config['table']), $_REQUEST, (array)  json_decode(file_get_contents('php://input'),true));
    $online->init();
    $online->_request['id']=$ShopTransactionID ;
    $online->load();
    $online->row = $online->_data('row');

    if($online->row['stato']==0){
        $online->row['stato']=1;
        //$online->row['browsersella'] = "no browser"
        $online->row['more'] = json_encode($sella);    
        $online->save();  
    }
    
    $vue->_request['oggetto'] = 'Sella '.$config['societa'].': TransactionResult is OK and online is '.$online->row['id'];
    $vue->_request['body'] = "Dati da Sella:<pre>".json_encode($sella)."</pre>";
    $vue->email();


    if($online->row['motivo']==1){
        $vue->_request['oggetto'] = 'Sella '.$config['societa'].' ['.$online->row['id'].']: Gestione ritorno per nuova iscrizione '.$online->row['contatto'];
        $vue->_request['body'] = "Dati da Sella:<pre>".json_encode($sella)."</pre>";
        $vue->email();
        
        //Gestione ritorno per il diventasocio        
        $schedasocio = new \Teras\Db();
        $schedasocio->_request = array('adapter'=>$config['adapter'],'database'=>'bm_iscrizionisoc','primary'=>'id','table'=>'scheda'.$config['societa']);
        $schedasocio->init();
        $schedasocio->_request['id']=$online->row['contatto'];
        $schedasocio->load();
        $schedasocio->row = $schedasocio->_data('row');
        
        $schedasocio->row['step'] = 3;
        $schedasocio->row['online'] = $online->row['id'];

        $schedasocio->_request['row'] =  $schedasocio->row;
        $schedasocio->save();
        
        $online->_request['row'] =  $online->row;
        $online->save();

        //Chiamo la pagina su diventasocio per l'importazione in LIMMSY
        file_get_contents("https://diventasocio.biomedia.net/g".$config['societa']."/importaevai/id/".$online->row['contatto']."?dapagamento=1");
        exit;    
    }


    if($online->row['stato']==1){
        $vue->_request['oggetto'] = 'Sella '.$config['societa'].' ['.$online->row['id'].']: Creo il versamento di € '.$online->row['importo'];
        $vue->_request['body'] = "Dati da Sella:<pre>".json_encode($sella)."</pre>";
        $vue->email();

        //Procedo alla gestione del versamento
        $versamento = new \Teras\Db();
        $versamento->_request = array('adapter'=>'bm','database'=>'bm_limmsy','primary'=>'id','table'=>'versamento');
        $versamento->init();
        $versamento->_request['id']='';
        $versamento->load();
        $versamento->row = $versamento->_data('row');

        
        $versamento->row['contatto'] = $online->row['contatto'];
        $versamento->row['mezzo'] = $config['mezzo'];
        $versamento->row['sezione'] = $config['sezione'];
        $versamento->row['fee'] = 1;
        $versamento->row['importo'] = $online->row['importo'];
        $versamento->row['step'] = 1;
        
        $versamento->row['utente'] = 1;
        $versamento->row['eseguitoil']=date('Y-m-d');
        $versamento->row['incassatoil']=date('Y-m-d');
        $versamento->row['modificatoil']=date('Y-m-d H:i:s');
        $versamento->_request['row'] =  $versamento->row;

        $vue->_request['oggetto'] = 'Sella '.$config['societa'].' ['.$online->row['id'].']: Salvo il versamento di € '.$online->row['importo'];
        $vue->_request['body'] = "Dati per il versamento:<pre>".json_encode($versamento->row)."</pre>";
        $vue->email();

        $versamento->save();
        $versamento->row = $versamento->_data('row');
        $online->row['versamento'] = $versamento->row['id'];
        
        $online->row['stato']=2;
        $online->_request['row'] =  $online->row;

        $online->save();
        
    }

    $quote = json_decode($online->row['quote']);
    if($online->row['stato']==2){
        $vue->_request['oggetto'] = 'Sella '.$config['societa'].' ['.$online->row['id'].']: Gestione banca '.$online->row['importo'];
        $vue->_request['body'] = "Dati da Sella:<pre>".json_encode($sella)."</pre>";
        $vue->email();

        //Procedo con la gestione della banca    
        $rows=array();
        $isNew = true;
        /* 
        OLD
        [{"id":600,"importo":50}]


        NEW
        [{"id":1800,"nuovo":0,"anno":2019,"importo":80}]
        */
        foreach($quote as $quota){
           $isNew = true;
           foreach($rows as $key=>$row){
              if($row['societa'] == $quota->id){
                 $rows[$key]['importo'] += $quota->importo;
                 $isNew = false;
              }
           }
           if($isNew)
              $rows[] = ['id'=>'','contatto'=>$online->row['contatto'],'versamento'=>$online->row['versamento'],'importo'=>$quota->importo,'societa'=>$quota->id]; 
        }
        

        $db = new \Teras\Db();
        $db->_request = array('adapter'=>$config['bm'],'database'=>$config['database'],'primary'=>'id','table'=>'banca');
        $db->init();
        $db->_request['rows'] =  $rows;
        $db->insertRows();

        
        $online->row['stato']=3;
        $online->_request['row'] =  $online->row;
        $online->save();
    }

    if($online->row['stato']==3){
        // GESTIONE NUOVE SOTTOSCRIZIONI
        echo "<br /><br />GESTIONE NUOVE SOTTOSCRIZIONI<br />";
        $db = new \Teras\Db();
        $db->_request = array('adapter'=>$config['adapter'],'database'=>$config['database'],'sqlFetch' => 'doQuery');
        $db->init();
        $db->_request['sqlQuery'] = "INSERT INTO statoiscrizione (contatto,societa,stato,tiposocio,inseritoil,giorno,annosocio,primoanno,ultimoanno)  (SELECT banca.contatto,banca.societa,'ATTIVO',1,NOW(),NOW(),YEAR(NOW()),YEAR(NOW()),YEAR(NOW())-1 FROM banca LEFT JOIN statoiscrizione AS si ON si.societa=banca.societa AND si.contatto=banca.contatto WHERE banca.contatto=←contatto AND si.id IS NULL)";
        $db->_request['sqlParams'] = array('contatto'=>$online->row['contatto']);
        $db->query();
        //$db->_request['sqlQuery'] = "UPDATE statoiscrizione SET dbaction=1 WHERE contatto=←contatto";
        //$db->query();
        echo "<br /><br />FINE GESTIONE NUOVE SOTTOSCRIZIONI<br />";


        $online->row['stato']=4;
        $online->_request['row'] =  $online->row;
        $online->save();
    }

    if($online->row['stato']==4){  
        $online->row['stato']=5;
        $online->_request['row'] =  $online->row;
        $online->save();
    }


    if($online->row['stato']==5){
        // GESTIONE RICEVUTA   
        $online->row['stato']=9;
        $online->_request['row'] =  $online->row;
        $online->save();
    }

    echo "Procedura completata";

 }else{
    $vue->_request['oggetto'] = 'Sella '.$config['societa'].': TransactionResult is KO';
    $vue->_request['body'] = "La procedura di ritorno sella non ha funzionato:<pre>".json_encode($sella)."</pre>";
    $vue->email();

    var_dump($sella);exit;
    echo "NON HA FUNZIONATO";

 }   

 
exit;
?>
