The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package window_session_test;
use Dancer ':syntax';
use Dancer::Plugin::WindowSession ;
use strict;
use warnings;
use Cwd;
use Carp;
use GD::Graph;
use GD::Graph::bars;
use GD::Graph::pie;
use GD::Graph::lines;
use GD::Graph::points;
use GD::Graph::area;


my @plot_data = (
	[ "2004","2005","2006","2007","2008","2009","2010","2011","2012" ],
	[ 38,     58,   1,      16,   260,   6,     28,     25,   87 ]
);

get '/' => sub {
	my $username = (session 'username') || "New User";
	session 'username' => $username;

	template 'index' ;
};

get '/image.png' => sub {
	my $img_width  = window_session('plot_width') || 400 ;
	my $img_height = window_session('plot_height') || 300 ;
	my $plot_type  = window_session('plot_type') || "bars";
	my $plot_color = window_session( 'plot_color') || "blue" ;

	my $g;
	if ($plot_type eq "bars") {
		$g = GD::Graph::bars->new($img_width,$img_height);
	} elsif ( $plot_type eq "lines" ) {
		$g = GD::Graph::lines->new($img_width,$img_height);
	} elsif ( $plot_type eq "area" ) {
		$g = GD::Graph::area->new($img_width,$img_height);
	} elsif ( $plot_type eq "points" ) {
		$g = GD::Graph::points->new($img_width,$img_height);
	} elsif ( $plot_type eq "pie" ) {
		$g = GD::Graph::pie->new($img_width,$img_height);
	} else {
		die "Error: unknown plot type '$plot_type'";
	}

	$g->set(
			title => "Thingamjigs per Year",
			x_label => "Years",
			y_label => "Thingamjigs")
		or die $g->error;

	$g->set ( dclrs => [ $plot_color ] )
		or die $g->error;

	header('Content-Type' => 'image/png' );
	return $g->plot(\@plot_data)->png();
};

## The user wants to change settings, show the <form>
get '/settings' => sub {
	template 'settings' ;
};

## The user submitted changes,
## Save the variables to session & window_session hashes,
## and redirect back to the main page.
post '/settings' => sub {

	## Get the variables, as submitted by the user
	## NOTE: This is just a demo, so no input validation is performed.
	my $username   = param('username') || "Unknown User";
	my $plot_type  = param('plot_type') || "bars" ;
	my $plot_color = param('plot_color') || "blue";
	my $plot_width = param('plot_width') || 400 ;
	my $plot_height= param('plot_height') || 300 ;

	# Save the username as a session variable
	session 'username' => $username;

	# Save the plot settings as a window-setting variables.
	window_session 'plot_type' => $plot_type;
	window_session 'plot_color' => $plot_color;
	window_session 'plot_width' => $plot_width;
	window_session 'plot_height' => $plot_height;

	## NOTE:
	## We must pass-on the 'winsid' CGI variable
	## in every URL we use.
	my $winsid = window_session_id;
	redirect "/?winsid=$winsid";
};

true;