The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Wight::Chart::Google;

#ABSTRACT: Save google charts to images using phantomjs

our $VERSION = '0.003'; # VERSION

use Moo;
use JSON::XS;
use Encode;
extends 'Wight::Chart';
sub src_html { 'google.html' }

#TODO: import roles for each type for more options
my $types = {
  line => "LineChart",
  area => "AreaChart",
  bar => "BarChart",
  pie => "PieChart",
  spark => 'ImageSparkLine',
};

has 'type' => ( is => 'rw', required => 1, isa => sub { $types->{$_[0]} } );
has 'border' => ( is => 'rw', default => 100 );

sub render {
  my ($self) = @_;
  my $w = $self->wight;
  my $options = {
    chartArea => {
      width => $self->width - $self->border,
      height => $self->height - $self->border,
    },
    %{$self->options}
  };

  my $args = decode_utf8(encode_json({
    options => $options,
    type => $types->{$self->type},
    rows => $self->rows,
    columns => $self->columns,
  }));
  #warn $args;
  $w->evaluate("drawChart($args)");
  $w->render($self->output);
}


1;

__END__

=pod

=encoding utf-8

=head1 NAME

Wight::Chart::Google - Save google charts to images using phantomjs

=head1 VERSION

version 0.003

=head1 SYNOPSIS

  use Wight::Chart::Google;

  my $chart = Wight::Chart::Google->new(
    type => "area",
    width => 900,
    height => 500,
    options => {
      backgroundColor => 'transparent',
      hAxis => { gridlines => { color => "#fff" } },
      vAxis => { gridlines => { color => "#fff" } },
      legend => { position => 'none' },
    }
  );
  $chart->columns([
    { name => 'Day', type => 'string' },
    { name => 'Amount', type => 'number' },
  ]);
  $chart->rows([['1st',100], ['2nd',150], ['3rd',50], ['4th',70]]);
  $chart->render();

=head1 NAME

Wight::Chart::Google - Generate static google charts

=head1 AUTHOR

Simon Elliott <simon@papercreatures.com>

=head1 COPYRIGHT AND LICENSE

This software is copyright (c) 2013 by Simon Elliott.

This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.

=cut