<?php
#
function pctcolour($pct)
{
 if ($pct == 100)
 {
	$fg = 'white';
	$bg = 'black';
 }

 if ($pct < 100)
 {
	$grn = (2.0 - log10($pct)) * 255;
	if ($grn < 0)
		$grn = 0;
	if ($grn > 255)
		$grn = 255;

	if ($grn > 190)
		$fg = 'blue';
	else
		$fg = 'white';
	$bg = sprintf("#00%02x00", $grn);
 }

 if ($pct > 100)
 {
	$red = (log10(pow($pct,4.0)) - 8.0) / 3.0 * 255;
	if ($red < 0)
		$red = 0;
	if ($red > 255)
		$red = 255;

	$fg = 'white';
	$bg = sprintf("#%02x0000", $red);
 }

 return array($fg, $bg);
}
#
function doblocks($data, $user)
{
 $blink = '<a href=https://blockchain.info/block-height/';

 $pg = '';

 if ($user === null)
	$ans = getBlocks('Anon');
 else
	$ans = getBlocks($user);

 if (nuem(getparam('csv', true)))
	$wantcsv = false;
 else
	$wantcsv = true;

 if ($wantcsv === false)
 {
	if ($ans['STATUS'] == 'ok')
	{
		$count = $ans['rows'];
		if ($count == 1)
		{
			$num = '';
			$s = '';
		}
		else
		{
			$num = " $count";
			$s = 's';
		}

		$pg = "<h1>Last$num Block$s</h1>";
	}
	else
		$pg = '<h1>Blocks</h1>';

	$pg .= "<table callpadding=0 cellspacing=0 border=0>\n";
	$pg .= "<tr class=title>";
	$pg .= "<td class=dr>#</td>";
	$pg .= "<td class=dl>Height</td>";
	if ($user !== null)
		$pg .= "<td class=dl>Who</td>";
	$pg .= "<td class=dr>Reward</td>";
	$pg .= "<td class=dc>When</td>";
	$pg .= "<td class=dr>Status</td>";
	$pg .= "<td class=dr>Diff</td>";
	$pg .= "<td class=dr>Diff%</td>";
	$pg .= "<td class=dr>CDF</td>";
	$pg .= "</tr>\n";
 }
 $blktot = 0;
 $nettot = 0;
 $i = 0;
 $orph = false;
 $csv = "Sequence,Height,Status,Timestamp,DiffAcc,NetDiff,Hash\n";
 if ($ans['STATUS'] == 'ok')
 {
	$count = $ans['rows'];
	for ($i = 0; $i < $count; $i++)
	{
		$seq = $i + 1;
		if (($i % 2) == 0)
			$row = 'even';
		else
			$row = 'odd';

		$hi = $ans['height:'.$i];
		$hifld = "$blink$hi>$hi</a>";

		$ex = '';
		$stat = $ans['status:'.$i];
		if ($stat == 'Orphan')
		{
			$ex = 's';
			$orph = true;
		}
		if ($stat == '1-Confirm')
		{
			if (isset($data['info']['lastheight']))
			{
				$conf = 1 + $data['info']['lastheight'] - $hi;
				$stat = '+'.$conf.' Confirms';
			}
			else
				$stat = 'Conf';
		}

		$stara = '';
		$starp = '';
		if (isset($ans['status:'.($i+1)]))
			if ($ans['status:'.($i+1)] == 'Orphan'
			&&  $stat != 'Orphan')
			{
				$stara = '<span class=st1>*</span>';
				$starp = '<span class=st0>*</span>';
			}

		$diffacc = $ans['diffacc:'.$i];
		$acc = number_format($diffacc, 0);

		$netdiff = $ans['netdiff:'.$i];
		if ($netdiff > 0)
		{
			$pct = 100.0 * $diffacc / $netdiff;
			list($fg, $bg) = pctcolour($pct);
			$bpct = "<font color=$fg>$starp".number_format($pct, 2).'%</font>';
			$bg = " bgcolor=$bg";
			$blktot += $diffacc;
			if ($stat != 'Orphan')
				$nettot += $netdiff;

			$cdfv = 1 - exp(-1 * $diffacc / $netdiff);
			$cdf = number_format($cdfv, 2);
		}
		else
		{
			$bg = '';
			$bpct = '?';
			$cdf = '?';
		}

		if ($wantcsv === false)
		{
		 $pg .= "<tr class=$row>";
		 $pg .= "<td class=dr$ex>$seq</td>";
		 $pg .= "<td class=dl$ex>$hifld</td>";
		 if ($user !== null)
			$pg .= "<td class=dl$ex>".htmlspecialchars($ans['workername:'.$i]).'</td>';
		 $pg .= "<td class=dr$ex>".btcfmt($ans['reward:'.$i]).'</td>';
		 $pg .= "<td class=dl$ex>".gmdate('Y-m-d H:i:s+00', $ans['firstcreatedate:'.$i]).'</td>';
		 $pg .= "<td class=dr$ex>".$stat.'</td>';
		 $pg .= "<td class=dr>$stara$acc</td>";
		 $pg .= "<td class=dr$bg>$bpct</td>";
		 $pg .= "<td class=dr>$cdf</td>";
		 $pg .= "</tr>\n";
		}
		else
		{
		 $csv .= "$seq,";
		 $csv .= "$hi,";
		 $csv .= "\"$stat\",";
		 $csv .= $ans['firstcreatedate:'.$i].',';
		 $csv .= "$diffacc,";
		 $csv .= "$netdiff,";
		 $csv .= $ans['blockhash:'.$i]."\n";
		}
	}
 }
 if ($wantcsv === true)
 {
	echo $csv;
	exit(0);
 }
 if ($nettot > 0)
 {
	if (($i % 2) == 0)
		$row = 'even';
	else
		$row = 'odd';

	$pct = 100.0 * $blktot / $nettot;
	list($fg, $bg) = pctcolour($pct);
	$bpct = "<font color=$fg>".number_format($pct, 2).'%</font>';
	$bg = " bgcolor=$bg";

	$pg .= "<tr class=$row>";
	$pg .= '<td colspan=2 class=dr>Total:</td>';
	$pg .= '<td class=dl colspan=';
	if ($user === null)
		$pg .= '4';
	else
		$pg .= '5';
	$pg .= '></td>';
	$pg .= "<td class=dr$bg>".$bpct.'</td>';
	$pg .= "<td></td></tr>\n";
	if ($orph === true)
	{
		$pg .= '<tr><td colspan=';
		if ($user === null)
			$pg .= '7';
		else
			$pg .= '8';
		$pg .= ' class=dc><font size=-1><span class=st1>*</span>';
		$pg .= '% total is adjusted to include orphans correctly';
		$pg .= '</font></td></tr>';
	}
 }
 $pg .= "</table>\n";

 return $pg;
}
#
function show_blocks($info, $page, $menu, $name, $user)
{
 gopage($info, NULL, 'doblocks', $page, $menu, $name, $user);
}
#
?>