package CLMApp::Controller::DataTable;
use Mojo::Base 'Mojolicious::Controller';
use Data::Show;
use Moose;
use Moose::Autobox;
use Perl6::Junction qw/any/;
use Data::Show;
use JSON;
use Cwd;
use Digest::MD5 qw(md5 md5_hex md5_base64);
use Digest::SHA1  qw(sha1 sha1_hex sha1_base64);
use Storable 'dclone';



sub read{
	my $c = shift;
	my $table = $c->stash('table') || $c->req->param('table');
	my $key = $c->stash('key') || $c->req->param('key');

	my $u = $c->db->resultset('User')->find({user_id => $c->session->{user_id}});
	my $json = JSON->new->allow_nonref;
	my $settings = $json->decode( $u->settings || '{}' );
show $settings;
	my $view = $settings->{datatables}->{views}->{$table}->{$key};
	my @keys = keys %{ $settings->{datatables}->{views}->{$table} };
	@keys = sort(@keys);
	if($key){

		$c->session->{lastview} = $view->{name};
		$c->stash('viewname', $view->{name});
		$c->stash('fontsize', $view->{fontsize});
		$c->stash('cols',$view->{colsView});
		$c->stash('keys',\@keys);
		my $html = $c->render_to_string(template => 'root/datatableviews');
		$c->render(json => { table => $table, view => $view, html => $html });


	}else{
		return $settings;
	}
}

sub create{
	my $c = shift;
	my $view = shift;
	my $default = shift;
	my $table = $c->stash('table') || $c->req->param('table');
	my $settings = $c->read;

	$settings->{datatables}->{views}->{$table}->{$view->{name}} = $view;

	my $json = JSON->new->allow_nonref;
	my $jtext = $json->encode( $settings );

	$c->db->resultset('User')->find({user_id => $c->session->{user_id}})->update({settings => $jtext});
}


sub list{
	my $c = shift;
	my $body = $c->req->body;
	my $json = $c->req->json;
	my $table = $c->stash('table') || $c->req->param('table');
	my $settings = $c->read;
	my $keys = $settings->{datatables}->{views}->{$table};
	my @keys = keys %$keys;
	if($json->{save}){
		push(@keys, $json->{name});
	}
	@keys = sort(@keys);

	my $view = { 
		columns => [] , 
		columnDefs => [], 
		fontsize => $json->{fontsize}, 
		name=> $json->{name}, 
		table => $json->{table}, 
		default => $json->{default},
	};
	my(@cols);
	foreach my $col (@{$json->{aoColumns}}){

		my @attrs;
		my $attrs = {'data-index' => ($col->{idx} || 0), 'data-width' => $col->{sWidth}, 'data-field' => $col->{data} };
show $attrs;		
		foreach my $k (keys %$attrs){
			push(@attrs, $k . '="' .  $attrs->{$k}  . '"');
		}
		# show @attrs;
		push(@{$view->{columns}}, {title => $col->{title}, data => $col->{data}});
		push(@{$view->{columnDefs}}, {targets => $col->{idx}, searchable => 1, visible => $col->{visible}, width => $col->{sWidth} });
		push(@cols, {field => $col->{data}, visible => $col->{visible}, title => $col->{title}, attrs => join(' ', @attrs) });

	}
	if($json->{save}){
		$view->{colsView} = \@cols;
		$c->create($view, $json->{default});
	}
# show @cols;
	$c->stash('viewname', $json->{name} || $c->session->{lastview});
	$c->stash('fontsize', $json->{fontsize});
	$c->stash('cols',\@cols);
	$c->stash('keys',\@keys);
	my $html = $c->render_to_string(template => 'root/datatableviews');
	$c->render(json => { table => $table, view => $view, html => $html });


	

	
}

sub delete{
	my $c = shift;
	my $table = $c->stash('table') || $c->req->param('table');
	my $key = $c->stash('key') || $c->req->param('key');
	delete $c->stash->{key}; $c->req->params->remove('key');

	my $u = $c->db->resultset('User')->find({user_id => $c->session->{user_id}});
	my $json = JSON->new->allow_nonref;
	my $settings = $json->decode( $u->settings || '{}' );
	delete $settings->{datatables}->{views}->{$table}->{$key};
	my $jtext = $json->encode($settings);
	$c->db->resultset('User')->find({user_id => $c->session->{user_id}})->update({settings => $jtext});

	$c->list;
}




1;