<?php


// Make sure to display all errors
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);


//---- Include files
use MoneroIntegrations\MoneroPhp\daemonRPC;
use MoneroIntegrations\MoneroPhp\walletRPC;
require_once('src/jsonRPCClient.php');
require_once('src/daemonRPC.php');
require_once('src/walletRPC.php');


//---- Mysql
$db_host1 = "95.216.24.175";
$db_port1 = "3306";
$db_user1 = "universal";
$db_pass1 = "4VTqTjZL1Un13K4m";
$db_table1 = "monero";
$lo_conn = mysqli_connect( $db_host1, $db_user1, $db_pass1, $db_table1, $db_port1 );
if( mysqli_connect_errno() ) echo "Failed to connect to MySQL: " . mysqli_connect_error();

$db_host2 = "101.99.95.48";
$db_port2 = "7301";
$db_user2 = "zetta";
$db_pass2 = "vw5pDuzhxVAFtJS3";
$db_table2 = "live";
$an_conn = mysqli_connect( $db_host2, $db_user2, $db_pass2, $db_table2, $db_port2 );
if( mysqli_connect_errno() ) echo "Failed to connect to MySQL: " . mysqli_connect_error();


//---- Verify login
$passcode = "";
if (isset($argc)) {
	for ($i = 0; $i < $argc; $i++) {
		echo "Argument #" . $i . " - " . $argv[$i] . "\n";
		$passcode = $argv[$i];
	}
}
else {
	$passcode = $_GET['passcode'];
}



switch( $passcode ) {
	//---- Crontab functions
	case "QTOebokhjwqnt0n9Jd8n":
	break;
	//---- Requests from site for payments
	case "Aye8tWpx72rjqaxA1pPN":
	break;
	default:
		echo "<h1>Good Luck</h1>";
		exit();
	break;
}


//---- Connect to monerod
$daemonRPC = new daemonRPC('18.132.124.81', 18081);
$getblockcount = $daemonRPC->getblockcount();
$on_getblockhash = $daemonRPC->on_getblockhash(42069);
$getlastblockheader = $daemonRPC->getlastblockheader();
$get_info = $daemonRPC->get_info();


//---- Connect to wallet
$walletRPC = new walletRPC('127.0.0.1', 18082, 'http','Os5QKJBoPpjc757en1GT','x7Pb8DU2K2mWtg6KSMWr');
$open_wallet = $walletRPC->open_wallet('foster', 'Trix45Trix');
//
//$get_accounts = $walletRPC->get_accounts();
//$get_balance = $walletRPC->get_balance();


//---- Do functions
switch( $passcode ) {
	//---- Crontab functions
	case "QTOebokhjwqnt0n9Jd8n":
	
	
		//---- Check updating xmr price
		$res = $lo_conn->query( "SELECT * FROM settings WHERE `key`='xmr_update' LIMIT 1" );
		$res = $res->fetch_assoc();
		
		
		//---- Update every 24 hours
		if( $res['value'] < time() ) {
			$json = file_get_contents('https://api.coingecko.com/api/v3/coins/markets?vs_currency=eur');
			$obj = json_decode($json);
			
			foreach( $obj as $key => $row ) {
				if( $row->symbol == "xmr" ) {
					$price = $obj[$key]->current_price;
					$lo_conn->query( "UPDATE settings SET `value`='".$obj[$key]->current_price."' WHERE `key`='xmr_price'" );
					$lo_conn->query( "UPDATE settings SET `value`='".(time() + 60 * 60 * 24 - 60 )."' WHERE `key`='xmr_update'" );
				}
			}

		}
		
		//---- Get xmr_price
		$res = $lo_conn->query( "SELECT * FROM settings WHERE `key`='xmr_price' LIMIT 1" );
		$res = $res->fetch_assoc();
		$xmr_price = number_format( 1 / $res['value'], 10 );
		
		//---- Check for sub addressess
		$get_address = $walletRPC->get_address();
		unset( $get_address['addresses'][0] );
		//print_r( $get_address );
		$count_sub = 0;
		foreach ($get_address['addresses'] as $key => $account) {
			
			//---- ensure they are present in the db
			if( $account['used'] == false ) {
				$used = ( $account['used'] == true ? 1 : 0 );
				$lo_conn->query( "INSERT INTO addresses ( id, address, used ) VALUES ( ".$key.", '".$account['address']."', ".$used." ) ON DUPLICATE KEY UPDATE address='".$account['address']."', used=".$used );
				$count_sub++;
			}
			
		}
		
		//---- request more addresses?
		if( $count_sub < 20 ) {
			//echo "Request " . ( $count_sub - 20 ) . " sub addresses<br>";
		}
		
		//---- check for transactions
		$transactions = $walletRPC->incoming_transfers();
		if( count( $transactions ) > 0 ) {
			$transactions = $transactions['transfers'];
			foreach( $transactions as $row ) {
				
				
				//print_r( $transactions['transfers'] );
				//print_r( $row );
				
				$res = $lo_conn->query( "SELECT t.*, u.id AS uid FROM transfers t LEFT JOIN users u ON t.address=u.address WHERE t.key_image='".$row['key_image']."' LIMIT 1" );
				if( $res->num_rows == 0 ) {


					//---- echo add to table
					$amount = $row['amount'] / 1000000000000;
					$lo_conn->query( "INSERT INTO transfers ( key_image, address, amount ) VALUES ( '".$row['key_image']."', ".$row['subaddr_index']['minor'].", '".$amount."' )" );
					$lo_conn->query( "UPDATE addresses SET used=1 WHERE id=".$row['subaddr_index']['minor'] );
					
					
					//---- enable vip??? would this be pointless????
					if( $row['subaddr_index']['minor'] > 0 ) {
						$resa = $lo_conn->query( "SELECT t.*, u.id AS uid, u.plan, u.amount, u.monero FROM transfers t LEFT JOIN users u ON t.address=u.address WHERE t.key_image='".$row['key_image']."'" );
						$resa = $resa->fetch_assoc();
						
						//---- how to calculate payment and how many days???
						$plan = 0;
						$_amount = 0;
						if( $amount == $resa['monero'] ) {
							$plan = $resa['plan'];
							$_amount = $resa['amount'];
						}
						if( $plan == 0 ) {
							if( $amount > $xmr_price * 8 ) { $plan = 21; $_amount = 10; }
							if( $amount > $xmr_price * 23 ) { $plan = 22; $_amount = 25; }
							if( $amount > $xmr_price * 48 ) { $plan = 23; $_amount = 50; }
							if( $amount > $xmr_price * 78 ) { $plan = 24; $_amount = 80; }
						}
						$resb = $an_conn->query( "INSERT INTO xbtit_users_donate ( uid, amount, payment, ctime, plan, invoice ) VALUES ( ".$resa['uid'].", ".$_amount.", 'monero', UNIX_TIMESTAMP( NOW() ), ".$plan.", '".$resa['key_image']."' )" );
						
					}
					
				} else {
					
					$res = $res->fetch_assoc();
					
					//---- check to transfer
					if( $row['unlocked'] == 1 && $res['transfered'] == 0 ) {
						$transfer = $walletRPC->sweep_all( '47udmHLgjCD3UVGwDoBoyBY1hP5deM6jsRfTs4p16uHmBregVfNknUoaJwBQVwvqYT4Y1PrYoxu23jNZ86qUVPMA2W5bkFf', $row['subaddr_index']['minor'] );
						$lo_conn->query( "UPDATE transfers SET transfered=1 WHERE key_image='".$row['key_image']."'" );
					}
					
				}
				
			}
		}
		exit();
		
		
		
		//---- check for completed transactions and forward
		
		
		//---- Remove un used address
		$res = $lo_conn->query( "SELECT u.*, a.id AS aid, a.address FROM users u LEFT JOIN addresses a ON u.address=a.id WHERE a.temp=1 AND a.used=0 AND mtime<".time() );
		if( $res->num_rows > 0 ) {
			while($row = $res->fetch_assoc()) {
				$lo_conn->query( "UPDATE addresses SET temp=0 WHERE id=".$row['aid'] );
				$lo_conn->query( "DELETE FROM users WHERE id=".$row['id'] );
			}
		}
		
		
	
	break;
	//---- Requests from site for payments
	case "Aye8tWpx72rjqaxA1pPN":
	
	
		//---- Requesting sub address?
		$uid = (int)0 + (int)$_GET['uid'];
		$donation = (int)0 + (int)$_GET['donation'];
		$plan = (int)0 + (int)$_GET['plan'];
		//echo $uid . " " . $donation;

		
		//---- Array to return to sender
		$return = array( "price" => 0, "address" => "" );


		//---- get monero price
		$res = $lo_conn->query( "SELECT * FROM settings WHERE `key`='xmr_price' LIMIT 1" );
		$res = $res->fetch_assoc();
		$return['price'] = $res['value'];

		
		//---- does user have an address? temp/used
		$res = $lo_conn->query( "SELECT u.*, a.address FROM users u LEFT JOIN addresses a ON u.address=a.id WHERE u.id=".$uid." LIMIT 1" );
		if( $res->num_rows == 1 ) {
			$res = $res->fetch_assoc();
			$return['address'] = $res['address'];
			$mtime = time() + 60 * 29; // 29 minutes
			$lo_conn->query( "UPDATE users SET plan=".$plan.", amount=".$donation.", monero=".number_format($donation/$return['price'],10).", mtime=".$mtime." WHERE id=".$uid );
			echo json_encode( $return );
			exit();
		}

		
		//---- generate address?
		$res = $lo_conn->query( "SELECT * FROM addresses WHERE temp=0 AND used=0 LIMIT 1" );
		if( $res->num_rows == 0 ) {
			$return['address'] = "No addresses available at this time, check again later";
		}
		
		$res = $res->fetch_assoc();
		$return['address'] = $res['address'];

		$mtime = time() + 60 * 29; // 29 minutes
		$lo_conn->query( "INSERT INTO users ( id, address, plan, amount, monero, mtime ) VALUES ( ".$uid.", ".$res['id'].", ".$plan.", ".$donation.", ".number_format($donation/$return['price'],10).", ".$mtime." )" );
		$lo_conn->query( "UPDATE addresses SET temp=1 WHERE id=".$res['id'] );


		echo json_encode( $return );
		exit();

	
	break;
	default:
	break;
}




?>