#!/usr/bin/perl -w
#
#  rhrdlibs
#
#  Copyright (C) 2015-2016 Christian Pointner <equinox@helsinki.at>
#
#  This file is part of rhrdlibs.
#
#  rhrdlibs is free software: you can redistribute it and/or modify
#  it under the terms of the GNU Affero General Public License as published by
#  the Free Software Foundation, either version 3 of the License, or
#  any later version.
#
#  rhrdlibs is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU Affero General Public License for more details.
#
#  You should have received a copy of the GNU Affero General Public License
#  along with rhrdlibs. If not, see <http://www.gnu.org/licenses/>.
#

use strict;

# TODO: remove me!!!
use lib "../lib/";

use RHRD::rddb;
use RHRD::utils;
use Date::Calc;

sub print_usage
{
  print STDERR "Usage: rhrd-schedules generate YYYY-MM-DD\n" .
               "       rhrd-schedules show (W1|W2|W3|W4|ALL) (MO|TU|WE|TH|FR|SA|SU|ALL)\n";
}

sub generate
{
  my ($ctx, $year, $month, $day) = @_;

  my ($ret, $data) = RHRD::utils::fetch_parse_json("https://pv.helsinki.at/export/day_schedule/$year/$month/$day", "rhrd-schedules");
  if(!$ret) {
    print STDERR "Error fetching export from PV: $data\n";
    return 1;
  }

  for my $entry (@{$data}) {
    my $start = ${$entry}{'start'};
    my $title = ${$entry}{'title'};
    my $showid = ${$entry}{'id'};
    print "$start: ($showid) $title\n";
  }
  # TODO: create day log in rddb
  return 0;
}

sub show__day
{
  my ($ctx, @date) = @_;

  print "https://pv.helsinki.at/export/day_schedule/$date[0]/$date[1]/$date[2]\n";

  my ($ret, $data) = RHRD::utils::fetch_parse_json("https://pv.helsinki.at/export/day_schedule/$date[0]/$date[1]/$date[2]", "rhrd-schedules");
  if(!$ret) {
    print STDERR "Error fetching export from PV: $data\n";
    return 1;
  }

  my $dow = Date::Calc::Day_of_Week(@date);

  my $errcnt = 0;
  for my $entry (@{$data}) {
    my $start = ${$entry}{'start'};
    my $title = ${$entry}{'title'};
    my $pvid = ${$entry}{'id'};
    my $showid = ${$entry}{'automation-id'};

    next if $pvid == 1; # 'Unmoderiertes Musikprogramm'

    print " $start: ($showid) -> ";
    if($showid > 0) {
      my ($rdtitle, $rdlog, $status, $errorstring) = RHRD::rddb::get_show_title_and_log($ctx, $showid);
      if(!defined $rdtitle || !defined $rdlog) {
        print "$status: $errorstring\n";
        $errcnt++;
      } elsif ($title ne $rdtitle) {
        print "WARNING: title mismatch (PV: '$title' != RD: '$rdtitle')\n";
        $errcnt++;
      } else {
        # TODO: check DayOfWeek!!!
        print "OK: $title\n";
      }
    } else {
      print "ERROR: show '$pvid|$title' not configured\n";
      $errcnt++;
    }
  }

  return $errcnt;
}

sub show
{
  my ($ctx, $week, $dow) = @_;

  # TODO: parse week number and day

  my @date = (2016, 4, 14);

#  print "$date[0].$date[1].$date[2] (" . Date::Calc::Day_of_Week_to_Text() . "):\n";
  print Date::Calc::Date_to_Text(@date) . ":\n";
  my $errcnt = show__day($ctx, @date);
  print "  -> $errcnt errors.\n\n";
  return 0;
}

my $num_args = $#ARGV + 1;
if($num_args < 1) {
  print_usage();
  exit(1);
}
my $cmd = $ARGV[0];
my $ret = 0;

my ($ctx, undef, $errorstring) = RHRD::rddb::init();
if(defined $ctx) {
  if($cmd eq "generate") {
    if($num_args == 2 && $ARGV[1] =~ m/^(\d{4})-(\d{2})-(\d{2})$/) {
      $ret = generate($ctx, $1, $2, $3);
    } else {
      print_usage();
      $ret = 1;
    }
  } elsif($cmd eq "show") {
    if($num_args != 3) {
      print_usage();
      $ret = 1;
    } else {
      $ret = show($ctx, $ARGV[1], $ARGV[2]);
    }
  } else {
    print_usage();
    $ret = 1;
  }

  RHRD::rddb::destroy($ctx);
} else {
  print STDERR "$errorstring\n";
  $ret = 1;
}

exit $ret;