<?php
require "/home/hpr/php/include.php";

$format="json";

if (isset($_GET['format'])){
    if ($_GET['format'] === "txt") {
        $format="txt";
    }
    if ($_GET['format'] === "json") {
        $format="json";
    }
    if ($_GET['format'] === "xml") {
        $format="xml";
    }
    if ($_GET['format'] === "csv") {
        $format="csv";
    }
}

$twat_startdate = abs(strtotime(date("c")) - strtotime("2005-09-19T00:00:00Z"));
$twat_years = floor($twat_startdate / (365*60*60*24));
$twat_months = floor(($twat_startdate - $twat_years * 365*60*60*24) / (30*60*60*24));
$twat_days = floor(($twat_startdate - $twat_years * 365*60*60*24 - $twat_months*30*60*60*24)/ (60*60*24));
$agetwat = $twat_startdate;

$hpr_startdate = abs(strtotime(date("c")) - strtotime("2007-12-31T00:00:00Z"));
$hpr_years = floor($hpr_startdate / (365*60*60*24));
$hpr_months = floor(($hpr_startdate - $hpr_years * 365*60*60*24) / (30*60*60*24));
$hpr_days = floor(($hpr_startdate - $hpr_years * 365*60*60*24 - $hpr_months*30*60*60*24)/ (60*60*24));
$agehpr = $hpr_startdate;


$last_show = mysqli_query($connection, "SELECT max(date), max(id) from eps");
$last_show_date = mysqli_fetch_row($last_show);
$totalshows=$last_show_date[1]+300;
$totalhpr=$last_show_date[1];

// --------------------------------------------
// Get the number of hosts

$ep_retrieve = "SELECT hostid FROM hosts WHERE valid = '1' ORDER BY hostid ASC";
$num_of_hosts = "1";
if ($result = mysqli_query($connection, $ep_retrieve)) {
    while ($row = mysqli_fetch_array($result)) {
        $hostid = $row['hostid'];
        $last_show = mysqli_query($connection, "SELECT max(date) from eps WHERE hostid='$hostid' AND valid = '1'");
        $last_show_date = mysqli_fetch_row($last_show);
        if (!empty($last_show_date[0])) {
          $num_of_hosts++;
        }
    }
}

// --------------------------------------------
// Get first free slot

$query = mysqli_query($connection, "SELECT  id + 1 FROM eps mo
WHERE   NOT EXISTS
        (
        SELECT  NULL
        FROM    eps mi 
        WHERE   mi.id = mo.id + 1
        )
ORDER BY
        id
LIMIT 1");
$next_show_num_array = mysqli_fetch_row($query);
$next_show_num = $next_show_num_array[0];

// --------------------------------------------
// Get latest published show

$query = mysqli_query($connection, "SELECT max(date), max(id) from eps WHERE eps.date <= UTC_DATE()");
$current_episode_array = mysqli_fetch_row($query);
$current_episode_date = $current_episode_array[0];
$current_episode_number = $current_episode_array[1];

// --------------------------------------------
// Populate array with future shows
$un_delivered = -1;
$days_to_undelivered = 0;
$show_array = array ();
$ep_retrieve = "SELECT hosts.host, eps.id, eps.title, eps.date FROM eps, hosts WHERE eps.valid=1 AND eps.hostid = hosts.hostid AND eps.date >= '$current_episode_date' ORDER BY date DESC";
if ($result = mysqli_query($connection, $ep_retrieve)) {
  while ($row = mysqli_fetch_array($result)) {
    $id = $row['id'];
    $id = fixid($id);
    $date = $row['date'];
    $title = $row['title'];
    $host = $row['host'];
		if ( file_exists("./eps/hpr$id.ogg") and file_exists("./eps/hpr$id.spx") and file_exists("./eps/hpr$id.mp3") ) {
			$delivered = 1;
			if ($un_delivered === -1 ) {
				$days_to_undelivered++;
			}
		}
		else {
			$delivered = 0;
			$un_delivered = $days_to_undelivered;
		}
		$show_array[$id]  = array ( "date" => $date, 
                                "title" => $title,
                                "host" => $host,
                                "delivered" => $delivered
                              );
  } 
}

// --------------------------------------------
// Calculate the time to the next show

$next_show_date = date('Y-m-d', strtotime($show_array[$next_show_num - 1 ]["date"] . ' + 1 weekday'));
$days_to_wait = floor((strtotime($next_show_date) - strtotime(gmdate('Y-m-d')))/(60*60*24));

// --------------------------------------------
// Future Hosts
$ep_retrieve = "SELECT DISTINCT hostid FROM eps WHERE eps.date > UTC_DATE()";

//  $ep_retrieve = "SELECT id, type, date, title, notes, host, hostid FROM eps WHERE valid = '1' ORDER BY id DESC LIMIT 10";
if ($result = mysqli_query($connection, $ep_retrieve)) {
  $num_future_hosts = mysqli_num_rows($result);
}

// --------------------------------------------
// Shows in the Queue
$ep_retrieve = "SELECT DISTINCT id FROM eps WHERE eps.date > UTC_DATE() AND duration <> 0";

//  $ep_retrieve = "SELECT id, type, date, title, notes, host, hostid FROM eps WHERE valid = '1' ORDER BY id DESC LIMIT 10";
if ($result = mysqli_query($connection, $ep_retrieve)) {
  $num_future_shows = mysqli_num_rows($result);
}

// --------------------------------------------
// Shows in the Queue
$result=mysqli_query($connection, "SELECT count(*) as total FROM `reservations` WHERE `status` LIKE 'SHOW_SUBMITTED' ORDER BY `ip` ASC ");
$data=mysqli_fetch_assoc($result);
$num_submitted_shows = $data['total'];

// --------------------------------------------
// Duration of all shows
$result=mysqli_query($connection, "SELECT SUM(duration) as total_duration FROM `eps`");
$data=mysqli_fetch_assoc($result);
$total_duration = $data['total_duration'];
$human_total_duration = convertSecToTime($total_duration);

// --------------------------------------------
// Reserve Shows

$result = mysqli_query($connection, 'SELECT COUNT(*) FROM reservations WHERE status="RESERVE_SHOW_SUBMITTED";');
if (!isset($result)) {
    naughty("cac33babd8a24edd138087ef7e4280f6");
}
$reserve_array = mysqli_fetch_row( $result );
$reserve_shows = $reserve_array[0];
mysqli_free_result($result);

// --------------------------------------------
// workflow

$ep_retrieve = "SELECT status, COUNT(*) AS total FROM reservations WHERE status != 'RESERVE_SHOW_SUBMITTED' GROUP BY status;";

$workflow="\"workflow\": {";
if ($result = mysqli_query($connection, $ep_retrieve)) {
  while ($row = mysqli_fetch_array($result)) {
    $status = $row['status'];
    $total = $row['total'];
    $workflow=$workflow."
      \"$status\": \"$total\",";
  }
}
    $workflow=$workflow."
      \"RESERVE_SHOW_SUBMITTED\": \"$reserve_shows\"
    },";

// --------------------------------------------
// duration
$result=mysqli_query($connection, "SELECT SUM(duration) as total_duration FROM `eps`");
$data=mysqli_fetch_assoc($result);
$total_duration = $data['total_duration'];
$human_total_duration = convertSecToTime($total_duration);

// --------------------------------------------
// Unprocessed comments
$comment_directory = "/home/hpr/comments";
$unprocessed_comments = iterator_count(new FilesystemIterator("$comment_directory", FilesystemIterator::SKIP_DOTS));

// --------------------------------------------
// Shows on the FTP server

$new_shows=0;
if ($handle = opendir('/home/hpr/upload')) {
  while (false !== ($entry = readdir($handle))) {
    if ( $entry != "." && $entry != "..") {
      $new_shows++;
    }
  }
  closedir($handle);
}

// --------------------------------------------
// Produce output

$current_time = time();

if ($format === "json") {
    header('Content-Type: application/json');
    header("Content-disposition: inline; filename=hpr_stats.json");
    echo "{
    \"stats_generated\": ".$current_time.",
    \"age\": {
        \"start\": \"2005-09-19T00:00:00Z\",
        \"rename\": \"2007-12-31T00:00:00Z\",
        \"since_start\": {
            \"total_seconds\": ".$agetwat.",
            \"years\": ".$twat_years.",
            \"months\": ".$twat_months.",
            \"days\": ".$twat_days."
        },
        \"since_rename\": {
            \"total_seconds\": ".$agehpr.",
            \"years\": ".$hpr_years.",
            \"months\": ".$hpr_months.",
            \"days\": ".$hpr_days."
        }
    },
    \"shows\": {
        \"total\": ".$totalshows.",
        \"twat\": 300,
        \"hpr\": ".$totalhpr.",
        \"duration\": ".$total_duration.",
        \"human_duration\": \"".$human_total_duration."\"
    },
    \"hosts\": ".$num_of_hosts.",
    \"slot\": {
        \"next_free\": ".$days_to_wait.",
        \"no_media\": ".$un_delivered."
    },
    $workflow
    \"queue\": {
        \"number_future_hosts\": ".$num_future_hosts.",
        \"number_future_shows\": ".$num_future_shows.",
        \"unprocessed_comments\": ".$unprocessed_comments.",
        \"submitted_shows\": ".$num_submitted_shows.",
        \"shows_in_workflow\": ".$new_shows.",
        \"reserve\": ".$reserve_shows."
    }
}
";
}
elseif ($format === "xml") {
    header("Content-type: application/xml");
    header("Content-disposition: inline; filename=hpr_stats.xml");
    echo "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>
<stats>
  <stats_generated>".$current_time."</stats_generated>
  <age>
    <start>2005-09-19T00:00:00Z</start>
    <rename>2007-12-31T00:00:00Z</rename>
    <since_start>
      <total_seconds>".$agetwat."</total_seconds>
      <years>". $twat_years."</years>
      <months>".$twat_months."</months>
      <days>".$twat_days."</days>
    </since_start>
    <since_rename>
      <total_seconds>".$agehpr."</total_seconds>
      <years>".$hpr_years."</years>
      <months>".$hpr_months."</months>
      <days>".$hpr_days."</days>
    </since_rename>
  </age>
  <shows>
    <total>".$totalshows."</total>
    <twat>300</twat>
    <hpr>".$totalhpr."</hpr>
    <duration>".$total_duration."</duration>
    <human_duration>".$human_total_duration."</human_duration>
  </shows>
  <hosts>".$num_of_hosts."</hosts>
  <slot>
    <next_free>".$days_to_wait."</next_free>
    <no_media>".$un_delivered."</no_media>
  </slot>
  <queue>
    <number_future_hosts>".$num_future_hosts."</number_future_hosts>
    <number_future_shows>".$num_future_shows."</number_future_shows>
    <unprocessed_comments>".$unprocessed_comments."</unprocessed_comments>
    <submitted_shows>".$num_submitted_shows."</submitted_shows>
    <shows_in_workflow>".$new_shows."</shows_in_workflow>
    <reserve>".$reserve_shows."</reserve>
  </queue>
</stats>";
}
elseif ($format === "csv") {
    header("Content-type: text/csv");
    header("Content-disposition: inline; filename=hpr_stats.csv");
    
    print "stats_generated,age_start,age_rename,age_since_start_total_seconds,age_since_start_years,age_since_start_months,age_since_start_days,age_since_rename_total_seconds,age_since_rename_years,age_since_rename_months,age_since_rename_days,shows_total,shows_twat,shows_hpr,hosts,slot_next_free,slot_no_media,number_future_hosts,number_future_shows,unprocessed_comments,shows_in_workflow,queue_reserve,duration\n";
    print "${current_time},2005-09-19T00:00:00Z,2007-12-31T00:00:00Z,${agetwat},${twat_years},${twat_months},${twat_days},${agehpr},${hpr_years},${hpr_months},${hpr_days},${totalshows},300,${totalhpr},${num_of_hosts},${days_to_wait},${un_delivered},${num_future_hosts},${num_future_shows},${unprocessed_comments},${new_shows},${reserve_shows},${total_duration}\n";
    
}
else {
    Header('Content-type: text/tab-separated-values');
    header("Content-disposition: inline; filename=hpr_stats.txt");
    printf("Started:\t%d years, %d months, %d days ago (2005-09-19)\n", $twat_years, $twat_months, $twat_days);
    printf("Renamed HPR:\t%d years, %d months, %d days ago (2007-12-31)\n", $hpr_years, $hpr_months, $hpr_days);
    echo "Total Shows:\t" . $totalshows . "\n";
    echo "Total TWAT:\t300\n";
    echo "Total HPR:\t" . $totalhpr . "\n";
    echo "Duration:\t" . $total_duration . "\n";
    echo "Human Duration:\t" . $human_total_duration . "\n";
    echo "HPR Hosts:\t${num_of_hosts}\n";
    echo "Days to next free slot:\t${days_to_wait}\n";
    echo "Hosts in Queue:\t$num_future_hosts\n";
    echo "Shows in Queue:\t$num_future_shows\n";
    echo "Comments waiting approval:\t$unprocessed_comments\n";
    echo "Files on the FTP Server:\t$new_shows\n";
    echo "Number of Reserve Shows:\t$reserve_shows\n";
    echo "Days until show without media:\t$un_delivered\n";
    print "$current_time,$agetwat,$agehpr,$totalshows,300,$totalhpr,$num_of_hosts,$days_to_wait,$num_future_hosts,$num_future_shows,$unprocessed_comments,$new_shows,$reserve_shows,$un_delivered";
    // print_r($show_array);
}
mysqli_close($connection);
?>