<?php
// app/api/accounts/approvedvalid
//SERVICIO EXCLUSIVO DE USDT

    header("Content-Type:application/json");
    include("../../../settings/dbconn.php");
    include("../../../settings/utils.php");
     
    $out = new stdClass();
    
    //  Este servicio es para obtener las direcciones USDT que esperan por aprobacion
    //  una vez tengan confirmada una transaccion, blanqueamos ese txid, y lanzamos el approve
        
    $sql = "SELECT wallets.* ".
    "       FROM wallets, accounts, currencies ".
    "       WHERE (wallets.txid != '' AND wallets.txid IS NOT NULL ) ".
    "       AND (wallets.txidApprove IS NULL OR wallets.txidApprove = '') ".
    "       AND accounts.id = wallets.accountid".
    "       AND accounts.currencyid = currencies.id".
    "       AND currencies.interface = 6";
    if (!$rs=$db->query($sql))
        badEnd("500", array("msg"=>determinateDBError($db)));
    
    $sqlPref =  "SELECT * FROM cmspreferences WHERE id = 1";
    if (!$rsPref=$db->query($sqlPref))
        badEnd("500", array("msg"=>determinateDBError($db)));
    
    $rowPref = $rsPref->fetch_assoc();
    $feeLimit = ($rowPref["limitfeeUsdt"]*1)>0?((($rowPref["limitfeeUsdt"]*1)*pow(10,6))):20000000; //Debe ser convertido de decimales a enteros, los primero 6 digitos corresponden a los decimales
    //Se multiplca porque el valor almacenado corresponde 1 = 1 TRX. ****** 20 TRX por default
    $i = 0;
    while($row = $rs->fetch_assoc()){        
        if($i>=1)break;
        // Verificamos si esta en approve o no
        if($row['txid'] != null && $row['txid'] != ''){
            //  Consultamos por ese txid
            $request = array('method'=>'getTransactionByTxid','txid'=>$row['txid']);
            $rest = json_decode(queryServicesUSDT($USDT_URL, $request), true);
            $out->entry [] = $rest;
            
            if($rest != null){
                if($rest['ret'][0]['contractRet'] == 'SUCCESS'){
                    // Aprobamos la direccion
                    $request = array('method'=>'approveAddress', 'from' => $row['wallet'], 'fromKey' => $row['secretKey'], 'feeLimit'=>$feeLimit);
                    $rest = json_decode(queryServicesUSDT($USDT_URL, $request), true);
                    
                    if($rest == NULL){
                        badEnd('500',array("msg"=>$rest, "msg2"=> $row));
                    }

                    // Guardamos el txid del approve
                    $sql = "UPDATE wallets SET".
                    "       txid = NULL, ".
                    "       txidApprove = '".$rest['txid']."'".
                    "       WHERE id = ".$row['id'];
                    if (!$db->query($sql))
                        badEnd("500", array("msg"=>determinateDBError($db)));

                }else if(($rest['ret'][0]['contractRet'] == 'OUT_OF_ENERGY' || $rest['ret'][0]['contractRet'] == 'REVERT')){ 
                    //Ya que estos se desactivan al llegar superar los 25TRX
                    $sqlUp =  "UPDATE cmspreferences SET newwalletfeeUsdt==".(($rowPref["limitfeeUsdt"]*1)+1)." WHERE id = 1";
                    if (!$rsPrefUp=$db->query($sqlUp))
                        badEnd("500", array("msg"=>determinateDBError($db)));

                    // Si expiramos la wallet blanqueamos el details 1 de la cuenta a la que pertenece
                    $sql = "UPDATE accounts SET ".
                    "       details1 = NULL ".
                    "       WHERE id = ".$row['accountid'];
                    if (!$db->query($sql))
                        badEnd("500", array("msg"=>determinateDBError($db)));

                    // Expiramos la wallet
                    $sql = "UPDATE wallets SET".
                    "       expirationDate = DATE_SUB(NOW(), INTERVAL 7 DAY), ".
                    "       txid = NULL, ".
                    "       txidApprove = NULL ".
                    "       WHERE id = ".$row['id'];
                    if (!$db->query($sql))
                        badEnd("500", array("msg"=>determinateDBError($db)));
                }
            }
        }
        $i++;
    }
    
    function formattedTrxAmount($value){
        return ((($value*1) > 0)?(($value*1)/1000000):0);
    }

    header("HTTP/1.1 200");
    echo (json_encode($out));
    die();
?>