#!/usr/bin/env php
<?php
/**
 * @author Simon Aebersold <s.aebersold@gmail.com>
 *
 * ZHAW daily course schedule for the command line.
 * uses the ZHAW CampusInfo API(v 1.5) by Andreas Ahlenstorf 
 */

use \Curl\Curl;
ini_set('display_errors', 0);

require_once 'lib/curl.php';
require_once 'lib/cli/cli.php';
require_once 'lib/cli/Streams.php';
require_once 'lib/cli/Colors.php';
require_once 'lib/cli/Table.php';
require_once 'lib/cli/Shell.php';
require_once 'lib/cli/table/Renderer.php';
require_once 'lib/cli/table/Ascii.php';
require_once 'lib/cli/table/Tabular.php';

// vars
$API_URL = 'https://api.apps.engineering.zhaw.ch/v1/';
$user = isset($argv[1]) ? $argv[1] : "";
$date = isset($argv[2]) ? $argv[2] : date_format(date_create('now'), 'Y-m-d');

// special case for 'tomorrow'
if($date === 'tomorrow')
{
    $date = date_format(date_create('tomorrow'), 'Y-m-d');
}

// print cli info
if(empty($user))
{
    \cli\line('stundenplan: ZHAW course schedule for the command line.');
    \cli\line('');
    \cli\line('Useage:');
    \cli\line('  stundenplan username [date]');
    \cli\line('');
    \cli\line('  username:  zhaw username');
    \cli\line('  date:      date in format YYYY-MM-DD | tomorrow');
    \cli\line('');
    exit(0);
}

// curling away
$curl = new Curl();
$curl->setUserAgent('aebersold/stundenplan (https://github.com/aebersold/stundenplan)');
$curl->setHeader('Accept', 'application/json');
$curl->get($API_URL . 'schedules/students/' . $user, array(
    'days' => '1',
    'startingAt' => $date,
));
$curl->close();

// catch errors
if ($curl->error) 
{
    if($curl->error_code == 404)
    {
        \cli\err('%1Error: user not found%n');
    } else {
        \cli\err('%1Error: ' . $curl->error_code . ': ' . $curl->error_message . '%n');    
    }
    exit(1);
}

// build data array
$rows = array();
foreach($curl->response->days[0]->events as $event)
{
    $rows[] = [
        date_format(date_create($event->startTime), 'H:i'),
        date_format(date_create($event->endTime), 'H:i'),
        $event->name,
        $event->eventRealizations[0]->room->name,
    ];
}

// output
\cli\line("Timetable for " . $user . " at " . $date);
if(empty($rows))
{
    \cli\line('%G%0No courses on ' . $date . '!%n');
} else {
    $headers = ['Start', 'End', 'Course', 'Room'];

    $table = new \cli\Table();
    $table->setHeaders($headers);
    $table->setRows($rows);
    $table->display();    
}

exit(0);