#!/usr/local/bin/perl -w
###########################################
# bandgraph - Graph Jawbone data
# Mike Schilli, 2013 (m@perlmeister.com)
###########################################
use strict;
use Chart::Clicker;
use Chart::Clicker::Renderer::Area;
use Chart::Clicker::Renderer::Bar;
use Chart::Clicker::Axis::DateTime;
use Chart::Clicker::Data::DataSet;
use Chart::Clicker::Data::Series;

use WWW::Jawbone::Up;
use DateTime::Duration;

my $email = 'user@isp.com';
my $pass  = 'changeme';

my $up = WWW::Jawbone::Up->connect(
 $email, $pass );

my @band  = $up->band( );

my @time     = ();
my @steps    = ();
my @distance = ();
my $total    = 0;

for my $band ( @band ) {
  push @time, $band->time();
  push @steps, $band->steps();

  $total += $band->distance();
  push @distance, $total;
}

my $cc = Chart::Clicker->new( 
  width => 1000, height => 800 );

my $def_ctx = $cc->get_context('default');

my $steps = 
  Chart::Clicker::Data::Series->new(
    values => \@steps,
    keys   => \@time,
    name   => "Steps",
  );

my $distance = 
  Chart::Clicker::Data::Series->new(
    values => \@distance,
    keys   => \@time,
    name   => "Distance",
  );

my $ds = 
  Chart::Clicker::Data::DataSet->new( 
    series => [ $distance ] );
my $ds_steps = 
  Chart::Clicker::Data::DataSet->new( 
    series => [ $steps ] );

my $steps_ctx = 
  Chart::Clicker::Context->new(
    name => 'steps'
  );
$cc->add_to_contexts( $steps_ctx );

$ds_steps->context( "steps" );

$cc->add_to_datasets( $ds );
$cc->add_to_datasets( $ds_steps );

my $dtaxis = 
  Chart::Clicker::Axis::DateTime->new(
    format      => "%H:%M",
    time_zone   => "America/Los_Angeles",
    position    => "bottom",
    orientation => "horizontal"
  );

$def_ctx->domain_axis( $dtaxis );
$steps_ctx->domain_axis( $dtaxis );

my $ren = 
  Chart::Clicker::Renderer::Area->new(
    opacity => .7,
  );
$ren->brush->width( 5 ) ;
$def_ctx->renderer( $ren );
$steps_ctx->renderer( 
  Chart::Clicker::Renderer::Bar->new( 
    opacity => .6, bar_width => 1 ) 
);

$cc->write_output( "chart.png" );
