<?php 
use BitWasp\Bitcoin\Script\ScriptFactory;
use BitWasp\Bitcoin\Transaction\TransactionFactory;
use BitWasp\Bitcoin\Script\Interpreter\InterpreterInterface as I;
include_once "../libraries/vendor/autoload.php";
include_once("html_iframe_header.php");
$result = false;
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
	
	try {
		$flags = I::VERIFY_NONE;
		$scriptSig = ScriptFactory::fromHex($_POST['script_sig']);
		
		$scriptPubKey = ScriptFactory::fromHex($_POST['script_pub_key']);
		
		//build empty tx for quick test purpose
		$tx = TransactionFactory::build()
			->input(str_pad('', 64, '0'), 0, $scriptSig)
			->get();
		$consensus = ScriptFactory::consensus();
		$nIn = 0;
		$amount = 0;
		
		if (!$consensus->verify($tx, $scriptPubKey, $nIn, $flags, $amount)) {
			throw new Exception("Consensus verification failed.");
		}
		
		$result = true;
	} catch (Exception $e) {
		$errmsg .= "Problem found. " . $e->getMessage();
	}
}
if ($errmsg) {
?>
	<div class="alert alert-danger">
		<strong>Error!</strong> <?php echo $errmsg?>
	</div>
<?php
}
if ($result) {
?>
	<div class="alert alert-success">
		<strong>Success!</strong>
	</div>
<?php
}
?>
<form action='' method='post'>
	<div class="form-group">
		<label for="script_sig">ScriptSig (In Hex):</label>
		<input class="form-control" type='text' name='script_sig' id='script_sig' value='<?php echo $_POST['script_sig']?>'>
	</div>
	
	<div class="form-group">
		<label for="script_pub_key">UTXO's ScriptPubKey (In Hex):</label>
		<input class="form-control" type='text' name='script_pub_key' id='script_pub_key' value='<?php echo $_POST['script_pub_key']?>'>
	</div>
	<input type='submit' class="btn btn-success btn-block"/>
</form>
<?php 
include_once("html_iframe_footer.php");		 		
	<?php 
use BitWasp\Bitcoin\Script\ScriptFactory;
use BitWasp\Bitcoin\Script\Opcodes;
use BitWasp\Buffertools\Buffer;
include_once "../libraries/vendor/autoload.php";
$operators = array("+", "-"); //* and / have been disabled
if ($_GET['ajax'] == '1') {
	if ($_SERVER['REQUEST_METHOD'] == 'POST') {
		try {
			$data = ['error'=>''];
			
			if (!(ctype_digit($_POST['operand1']) AND ctype_digit($_POST['operand2']))) {
				throw new Exception("Operand must be integer.");
			} else {
				$operand1 = (int)$_POST['operand1'];
				$operand2 = (int)$_POST['operand2'];
			}
			
			if ($_POST['operator'] == '+') {
				$result = $operand1 + $operand2;
				$op = 'OP_ADD';
			} else if ($_POST['operator'] == '-') {
				$result = $operand1 - $operand2;
				$op = 'OP_SUB';
			} else if ($_POST['operator'] == '*') {
				$result = $operand1 * $operand2;
				$op = 'OP_MUL';
			} else if ($_POST['operator'] == '/') {
				$result = $operand1 / $operand2;
				$op = 'OP_DIV';
			} else {
				throw new Exception("Invalid operator.");
			}
			
			if (!is_integer($result)) {
				throw new Exception("Equal result must be integer.");
			}
			
			if ($result < 0 ) {
				throw new Exception("Equal result must be positive number.");
			}
			
			$scriptPubKey = ScriptFactory::create()->int($operand2)->op($op)->int($result)->op('OP_EQUAL')->getScript();
			$scriptSig = ScriptFactory::create()->int($operand1)->getScript();
			
			$data['result']  = $result;
			$data['scriptPubKey'] = $scriptPubKey->getHex();
			$data['scriptSig'] = $scriptSig->getHex();
		} catch (Exception $e) {
			$data['error'] = $e->getMessage();
		}
		
		die(json_encode($data));
	}
}
include_once("html_iframe_header.php");
?>
<form id='this_form' action='' method='post'>
	<div class="form-group">
		<label for="scriptsig">Math:</label>
		<div class="form-row">
		
			<div class="form-group col-sm-1">
				<input class="form-control" type='text' name='operand1' id='operand1' value='<?php echo $_POST['operand1']?>' placeholder="Operand#1 (Integer)">
			</div>
			
			<div class="form-group col-sm-1">
				<select id="operator" name="operator" class="form-control" >
				<?php
				foreach($operators as $operator) {
					echo "<option value='{$operator}'".($operator == $_POST['operator'] ? " selected": "").">{$operator}</option>";
				}
				?>
				</select>
			</div>
			
			<div class="form-group col-sm-1">
				<input class="form-control" type='text' name='operand2' id='operand2' value='<?php echo $_POST['operand2']?>' placeholder="Operand#2 (Integer)">
			</div>
			
			<div class="form-group col-sm-1">
				=
			</div>
			
			<div class="form-group col-sm-1">
				 <input class="form-control" type='text' name='result' id='result' placeholder="Result" readonly>
			</div>
			
			<div class="form-group col-sm-7" id='msg' style='color:red'>
			
			</div>
		</div>
	</div>
	<div class="form-group">
		<label for="scriptsig">ScriptSig:</label>
		<textarea id='scriptsig' class="form-control" rows="1" readonly></textarea>
	</div>
	
	<div class="form-group">
		<label for="scriptpubkey">ScriptPubKey:</label>
		<textarea id='scriptpubkey' class="form-control" rows="1" readonly></textarea>
	</div>
	
	<a href='#hashtag1' onclick="javascript:parent.moveData($('textarea#scriptsig').val(),'iframe_verify_form', 'script_sig');parent.moveData($('textarea#scriptpubkey').val(),'iframe_verify_form', 'script_pub_key')">Insert</a>
</form>
<script>
	jQuery(document).ready(function() {
		$('#this_form').on('keyup change paste', 'input, select, textarea', function(){
			var self = $(this);
			$.ajax({
				url: '?ajax=1', 
				data:  $('#this_form :input'),
				type: 'post',
				success:function(result){
					try {
						
						j = eval('(' + result + ')');
						
						if (j.error.length >0) {
							$('#msg').html(j.error);
							$('#result').val('Error');
							$('textarea#scriptpubkey').val('Error');
							$('textarea#scriptsig').val('Error');
						} else {
							$('#msg').html('');
							$('#result').val(j.result);
							$('textarea#scriptpubkey').val(j.scriptPubKey);
							$('textarea#scriptsig').val(j.scriptSig);
						}
						
					} catch(e) {
						alert('Invalid Json Format.');
					}
				}
			});
		});
	});
</script>
<?php 
include_once("html_iframe_footer.php");		 		
	<?php 
use BitWasp\Bitcoin\Script\ScriptFactory;
use BitWasp\Bitcoin\Crypto\Hash;
use BitWasp\Bitcoin\Script\Opcodes;
use BitWasp\Buffertools\Buffer;
include_once "../libraries/vendor/autoload.php";
if ($_GET['ajax'] == '1') {
	if ($_SERVER['REQUEST_METHOD'] == 'POST') {
		try {
			$data = ['error'=>''];
			
			if (empty($_POST['preimage'])) {
				throw new Exception("Preimage cannot be empty.");
			} 
			
			$preimage = new Buffer($_POST['preimage']);
			$hash = Hash::sha256($preimage);
			
			$scriptPubKey = ScriptFactory::create()->op('OP_SHA256')->push($hash)->op('OP_EQUAL')->getScript();
			$scriptSig = ScriptFactory::create()->push($preimage)->getScript();
			
			$data['scriptPubKey'] = $scriptPubKey->getHex();
			$data['scriptSig'] = $scriptSig->getHex();
		} catch (Exception $e) {
			$data['error'] = $e->getMessage();
		}
		die(json_encode($data));
	}
}
include_once("html_iframe_header.php");
?>
<form id='this_form' action='' method='post'>
	<label for="preimage">Preimage:</label>
	<div class="form-row">
		<div class="form-group col-sm-6">
			<input class="form-control" type='text' name='preimage' id='preimage' value='<?php echo $_POST['preimage']?>' placeholder="">
		</div>
		
		<div class="form-group col-sm-6" id='msg' style='color:red'>
			
		</div>
	</div>
	
	<div class="form-group">
		<label for="scriptsig">ScriptSig:</label>
		<textarea id='scriptsig' class="form-control" rows="1" readonly></textarea>
	</div>
	
	<div class="form-group">
		<label for="scriptpubkey">ScriptPubKey:</label>
		<textarea id='scriptpubkey' class="form-control" rows="1" readonly></textarea>
	</div>
	
	<a href='#hashtag1' onclick="javascript:parent.moveData($('textarea#scriptsig').val(),'iframe_verify_form', 'script_sig');parent.moveData($('textarea#scriptpubkey').val(),'iframe_verify_form', 'script_pub_key')">Insert</a>
</form>
<script>
	jQuery(document).ready(function() {
		$('#this_form').on('keyup change paste', 'input, select, textarea', function(){
			var self = $(this);
			$.ajax({
				url: '?ajax=1', 
				data:  $('#this_form :input'),
				type: 'post',
				success:function(result){
					try {
						j = eval('(' + result + ')');
						
						if (j.error.length >0) {
							$('#msg').html(j.error);
							$('#result').val('Error');
							$('textarea#scriptpubkey').val('Error');
							$('textarea#scriptsig').val('Error');
						} else {
							$('#msg').html('');
							$('#result').val(j.result);
							$('textarea#scriptpubkey').val(j.scriptPubKey);
							$('textarea#scriptsig').val(j.scriptSig);
						}
						
					} catch(e) {
						alert('Invalid Json Format.');
					}
				}
			});
		});
	});
</script>
<?php 
include_once("html_iframe_footer.php");