#!/usr/bin/perl
use Data::Dumper;
use JSON;
use Text::CSV;
use utf8;
binmode STDOUT, ":encoding(UTF-8)";
my $csv = Text::CSV->new ( { binary => 1 } )  # should set binary attribute.
                 or die "Cannot use CSV: ".Text::CSV->error_diag ();
open my $fh, "<:encoding(utf8)", $ARGV[0] or die "$ARGV[0]: $!";
@fields = @{$csv->getline($fh)};
$csv->column_names(@fields);
print "\n\n";
while(my $dive = $csv->getline_hr($fh)) {
#  print STDERR "Dive number " . $dive->{"Dive #"} . "\n";
  my ($month, $day, $year) = split /\-/, $dive->{"Date"};
  print "\n";
  
  print "\n";
  print "" . $dive->{"Dive buddy"} . "\n";
  print "\n";
  print "" . &fix_amp($dive->{"Dive Site"}) .", $dive->{Location}\n";
  print "$dive->{lat} $dive->{lng}\n";
  print "$dive->{Notes}\n\n" . $dive->{"Marine life sighting"} . "\n\n";
  print "\n";
  print "";
  print "\n";
  &samples($dive->{"Dive profile data"});
  print "\n\n";
}
print "\n\n";
sub samples {
  my $diviac = shift;
#  print STDERR $diviac;
  my $p = eval {decode_json($diviac)};
#  print STDERR Dumper($p);
  my $dive, $events;
  $events = '';
  
  foreach $line (@$p){
    my ($a, $b, $c, $d, $e) = @$line;
    my $min = int($a / 60);
    my $sec = int($a) - 60 * $min;
    my $temp = $c ? "temp = '$c C' " : "";
    $dive .=  "\n";
    
    if (@$d) {
 #     print STDERR "Event at $a: ", (join '|', @$d), "\n";
      my $ev = join(' ', @$d);
      $events .= "\n";
    }
  }
  
  print "$events $dive\n";
}
sub fix_feet {
  my $d = shift;
  if ($d =~ /([\d\.]+)\s*ft/) {
    return ($1 * 0.3048) . ' m';
  } else {
    return $d;
  }
}
sub fix_lb {
  my $d = shift;
  if ($d =~ /([\d\.]+)\s*lb/) {
    return ($1 * 0.453592) . ' kg';
  } else {
    return $d;
  }
}
sub fix_psi {
  my $d = shift;
  if ($d =~ /([\d\.]+)\s*psi/) {
    return ($1 * 0.0689476) . ' bar';
  } else {
    return $d;
  }
}
sub fix_cuft {
  my ($d, $w) = @_;
  my $p;
  
  if ($w =~ /([\d\.]+)\s*psi/) {
    $p = $1 * 0.0689476;
    if ($d =~ /([\d\.]+)\s*ft/) {
      return ($1 * 28.3168 / $p) . ' l';
    } else {
      return $d;
    }
  } else {
    return '';
  }
}
sub fix_amp {
  my $s = shift;
  $s =~ s/\&/\&/g;
  return $s;
}