#!/usr/bin/perl -w

use DateTime;
use DateTime::Format::ISO8601;
use DateTime::Format::Strptime;

if ( $0 =~ m/2csv$/) {
    $csv = 1;
} else {
    $csv = 0;
}


$fast = 0;
while ($arg = shift(@ARGV)) {
    if ($arg =~ m/--fast/) { $fast = 1; }
}


my $isoparser = DateTime::Format::ISO8601->new();
my $ascparser = DateTime::Format::Strptime->new( pattern => '%H:%M:%S' );


if ($fast) {
    $mode = 0;
    foreach $data(<>) {
	if ($mode) {
	    if ($data =~ m/^\s*<Value>\s*(.*)\s*<\/Value>\s*$/) {
		$data = $1;
		if ($csv) {
		    $data =~ s/\s+/,/g;
		    $data =~ s/(^,|,$)//g;
	    	    print STDOUT $time . "," . $data . "\n";
		} else {
		    print STDOUT $time . " " . $data . "\n";
		}
		$mode = 0;
	    }
	} else {
	    if ($data =~ m/^\s*<Time>(.*)<\/Time>\s*$/) {
		$tm = $isoparser->parse_datetime($1);
	  	if ($tm) {
		    $tm->set_time_zone('GMT');
		    $time = $tm->strftime('%H:%M:%S');
		    $mode = 1;
		}
	    }
	} 
    }
    exit;
}

while (<>) {
    $data .= $_;
}

@records = split /<\/Data>\s*<Data\s*/, $data;
my @badlines;

foreach $rec(@records) {
    
    if ($rec =~ m/<Time>(.*)<\/Time>/) {
	  $tm = $isoparser->parse_datetime($1);
	  
	if ($tm) {
	    $tm->set_time_zone('GMT');
	    $time = $tm->strftime('%H:%M:%S');
	} else { undef($time); }
	
    } else { undef($time); }

    if ($rec =~ m/<Value>\s*(.*)\s*<\/Value>/) {
	$data = $1;
    } else { undef($data); }
    
    
    if (($time)&&($data)) {
	if ($csv) {
	    $data =~ s/\s+/,/g;
	    $data =~ s/(^,|,$)//g;
	    $res .= $time . "," . $data . "\n";
	} else {
	    $res .= $time . " " . $data . "\n";
	}
    } else {
	if (!$invrec) {
	    print STDERR "Invalid records:\n\n";
	    $invrec = 1;
	}
	$rec =~ s/^<Data\s*//;
	$rec =~ s/<\/Data>$//;
	print STDERR "<Data $rec\n</Data>\n\n";
    }
}

if (!$invrec) {
    print STDOUT $res;
}
