#!/usr/bin/perl

use gfio;
use gclient;
use Digest::SHA qw(sha512_hex);

print "Maestro Audio Converter v2.4.1\n\n";

open (STDERR,">&STDOUT");

my @lt=localtime();
my $HOUR = $lt[2];
system "wget -O /data/maestro/newnieuws.mp3 http://download.omroep.nl/nos/radionieuws/nosnieuws_bulalg.mp3";
my $data=gfio::content("/data/maestro/newnieuws.mp3",0,100000);
my $CURNEWS=sha512_hex($data);
my $TRIES=0;

sub checkmeta {
  if (-e "/data/maestro/metadata") {
    my $meta=gfio::content("/data/maestro/metadata");
    gclient::icecast2_metadata('lichtsnel.nl',1234,'/autodj','WaterLelie',$meta);
    unlink "/data/maestro/metadata"
  }  
}

do {
  checkmeta();
  my @lt=localtime();
  if ($lt[2] != $HOUR) {
    if (-e "/data/maestro/newnieuws.mp3") { unlink "/data/maestro/newnieuws.mp3" }
    system "wget -O /data/maestro/newnieuws.mp3 http://download.omroep.nl/nos/radionieuws/nosnieuws_bulalg.mp3";
    my $data=gfio::content("/data/maestro/newnieuws.mp3",0,100000);
    my $hash=sha512_hex($data);
    if ($hash ne $CURNEWS) {
      if (-e "/data/maestro/nieuws.wav") { unlink "/data/maestro/nieuws.wav" }
      if (-e "/data/maestro/mp3nieuws.wav") { unlink "/data/maestro/mp3nieuws.wav" }
      if (-e "/data/maestro/nieuws.mp3") { unlink "/data/maestro/nieuws.mp3" }
      system "ffmpeg -nostats -loglevel 0 -i /data/maestro/newnieuws.mp3 -acodec pcm_s16le -ar 48000 -ac 2 /data/maestro/mp3nieuws.wav";
      system "sox --norm /data/maestro/mp3nieuws.wav -t wav -b 16 -c 2 -r 48000 /data/maestro/nieuws.wav reverse silence 1 0.1 0.1% reverse";
      my $cmd="lame --preset insane -m joint -b -c -p --buffer-constraint maximum --strictly-enforce-ISO --resample 48000 --lowpass 19000 --tt \"NOS journaal\" -q 0 /data/maestro/nieuws.wav /data/maestro/nieuws.mp3";
      system($cmd);
      print "\n >> NIEUWS $lt[2] UUR - $TRIES pogingen\n";
      gfio::create("/data/maestro/newsready",1);
      $HOUR=$lt[2]; $TRIES=0; $CURNEWS=$hash
    } else {
      $TRIES++;
      if ($TRIES>12) {
        print "\n >> SKIPPED NIEUWS $lt[2] UUR !!\n";
        $HOUR=$lt[2]; $TRIES=0
      } else {
        sleep(10)
      }
    }
  } elsif ($lt[2] == $HOUR) {
    if (-e "/data/maestro/skip") {
      my $name=gfio::content("/data/maestro/skip");
      unlink "/data/maestro/skip";
      if (-e "/data/maestro/skip.wav") { unlink "/data/maestro/skip.wav" }
      if (-e "/data/maestro/mp3skip.wav") { unlink "/data/maestro/mp3skip.wav" }
      if (-e "/data/maestro/skip.mp3") { unlink "/data/maestro/skip.mp3" }
      system "gtts-cli -l nl 'Dit nummer is afgekapt door $name ..' -o /data/maestro/newskip.mp3";
      system "ffmpeg -nostats -loglevel 0 -i /data/maestro/newskip.mp3 -acodec pcm_s16le -ar 48000 -ac 2 /data/maestro/mp3skip.wav";
      system "sox --norm /data/maestro/mp3skip.wav -t wav -b 16 -c 2 -r 48000 /data/maestro/skip.wav";
      my $cmd="lame --preset insane -m joint -b -c -p --buffer-constraint maximum --strictly-enforce-ISO --resample 48000 --lowpass 19000 -q 0 /data/maestro/skip.wav /data/maestro/skip.mp3";
      system($cmd);
      gfio::create("/data/maestro/skipready",1)
    }
    if (-e "/data/maestro/start") {
      my $data=gfio::content("/data/maestro/start");
      my ($ext,$tit) = split(/\n/,$data);
      print "\n   --> $tit\n\n";
      if (-e "/data/maestro/mp3original.wav") { unlink "/data/maestro/mp3original.wav" }
      if (-e "/data/maestro/original.wav") { unlink "/data/maestro/original.wav" }
      if (-e "/data/maestro/playing.mp3") { unlink "/data/maestro/playing.mp3" }
      if ($ext eq 'wav') {
        system "sox /data/maestro/neworiginal.wav -t wav -b 16 -c 2 -r 48000 /data/maestro/mp3original.wav"
      } elsif ($ext eq 'flac') {
        system "flac -d /data/maestro/original.flac -o /data/maestro/mp3original.wav"
      } else {
        system "ffmpeg -nostats -loglevel 0 -i /data/maestro/original.$ext -acodec pcm_s16le -ar 48000 -ac 2 /data/maestro/mp3original.wav"
      }
      checkmeta();
      system "sox --norm /data/maestro/mp3original.wav -t wav -b 16 -c 2 -r 48000 /data/maestro/original.wav reverse silence 1 0.1 0.1% reverse";
      checkmeta();
      my $cmd="lame --preset insane -m joint -b -c -p --buffer-constraint maximum --strictly-enforce-ISO --resample 48000 --lowpass 19000 --tt \"$tit\" -q 0 /data/maestro/original.wav /data/maestro/playing.mp3";
      system($cmd);
      gfio::create("/data/maestro/ready",1);
      unlink("/data/maestro/start");
    }
  }
  sleep(1)
} until (0)