#!/usr/bin/perl

use strict;
use Statistics::Descriptive;
use SVG::Graph;
use SVG::Graph::Data;
use SVG::Graph::Data::Datum;

my %stat;

my $graph = SVG::Graph->new( width => 1000, height => 800, margin => 40 );
my $parentgroup = $graph->add_group;
my $statgroup   = $parentgroup->add_group;
my $bargroup    = $parentgroup->add_group;

my @data;
my $ymax = undef;
my $stat = Statistics::Descriptive::Full->new;
while (<>) {
    chomp;
    if (/^#stat:/) {
        process_stat($_);
        next;
    }
    my ( $x, $y ) = split /\s+/;
    $ymax = $y > $ymax ? $y : $ymax;
    $stat->add_data($x);
    push @data, SVG::Graph::Data::Datum->new( x => $x, y => $y );
}

$parentgroup->add_glyph('axis');

warn $stat{mean};

my @statdata = (
    SVG::Graph::Data::Datum->new( x => $stat->min, y => 0 ),

#			SVG::Graph::Data::Datum->new(x => $stat{mean}, y => $ymax),
#			SVG::Graph::Data::Datum->new(x => $stat{mean} - $stat{standard_deviation}, y => $ymax),
#			SVG::Graph::Data::Datum->new(x => $stat{mean} + $stat{standard_deviation}, y => 0),

    SVG::Graph::Data::Datum->new( x => $stat{median},    y => $ymax ),
    SVG::Graph::Data::Datum->new( x => $stat{quartile1}, y => $ymax ),
    SVG::Graph::Data::Datum->new( x => $stat{quartile3}, y => 0 ),

    SVG::Graph::Data::Datum->new( x => $stat->max, y => 0 ),

);
$statgroup->add_data( SVG::Graph::Data->new( data => \@statdata ) );
$statgroup->add_glyph(
    'barflex',
    'stroke'         => 'black',
    'fill'           => 'black',
    'stroke-opacity' => 1.0,
    'fill-opacity'   => 0.4
);

$bargroup->add_data( SVG::Graph::Data->new( data => \@data ) );
$bargroup->add_glyph(
    'bar',
    'stroke'         => 'red',
    'fill'           => 'red',
    'stroke-opacity' => 1.0,
    'fill-opacity'   => 0.8
);

print $graph->draw;

sub process_stat {
    my $line = shift;
    my ( $name, $value ) = $line =~ /^#stat:(\S+)\t(\S+)$/;
    $stat{$name} = $value;
}
