package <%= $app %>::Controller::<%= $controller %>;
use base "<%= $app %>::Controller";
use Data::Show;
use Moose;
use Moose::Autobox;
use Perl6::Junction qw/any/;
use Data::Show;
use JSON;
use strict;
use Cwd;
use Digest::MD5 qw(md5 md5_hex md5_base64);
use Digest::SHA1  qw(sha1 sha1_hex sha1_base64);
use Storable 'dclone';
use File::Basename;
$Storable::Deparse = 1;
$Storable::Eval = 1;

# use Class::Tiny qw//, {
# 	title => '<%== $title %>',
# 	table => '<%= $table %>',
# 	module => '<%= $module %>',
# 	pk => '<%= $pk %>',
# 	columns => [qw/<%= join(" ", @$columns) %>/],
# 	prefetch => [qw//],
# 	order_by => [qw/me.<%= $pk %>/]
# };


our $defaults = {
	title => '<%== $title %>',
	table => '<%= $table %>',
	module => '<%= $module %>',
	pk => '<%= $pk %>',
	columns => [qw/<%= join(" ", @$columns) %>/],
	prefetch => [qw//],
	order_by => [qw/me.<%= $pk %>/]
};

sub title{ return $defaults->{title}; }
sub table{ return $defaults->{table}; }
sub module{ return $defaults->{module}; }
sub pk{ return $defaults->{pk}; }
sub columns{ return $defaults->{columns}; }
sub prefetch{ return $defaults->{prefetch}; }
sub order_by{ return $defaults->{order_by}; }
sub where_session{ my $c = shift; return $defaults->{where_session} ? $defaults->{where_session}->($c) : {}; }
sub sortd{ return $defaults->{sortd} || 'desc'; }



sub setup{
	my $c = shift;


	my $fform = {
		attrs => {
			name => '<%== $module %>form',
			onsubmit => 'javascript: return false;',
			title => '',
			action => '',
			method => 'POST',
			# formon => 'form-always',
			# formoff => 'form-never',
			formon => 'form-on',
			formoff => 'form-off',
			cols => 2,
			autocomplete=>"new-password"
		},
		sorder => [],
		eorder => [qw/<%= join(" ", @$columns) %>/],
		elems =>     {
			spacer => { attrs => { name => 'spacer '}, type => 'spacer'},
			# empty => { attrs =>{ name => 'empty'}, type => 'empty' },
<% foreach my  $col (@$columns) { %>
			<%= $col %> => {
			      attrs => { class => "form-control input-md", name => "<%= $col %>" },
			      title => "<%= $col %>",
			      type => "readonly",
			      val => undef,
			},<% if($col eq $columns->[-1]){ %>
			# <%= $col %> => {
			    #   attrs => {
			    #                 class => "input-md form-control",
			    #                 name => "<%= $col %>",
			    #                # required => "required",
			    #               },
			    #   default => undef,
			    #   labels => [],
			    #   populate => {
			    #                 defaults => {
			    #                 	module => "<%= $table %>",
			    #                 	options => {
						 #                prefetch => [],			                    		
			    #                 		order_by => "<%= $col %>"
			    #                 	},
			    #                 	where => [qw/deleted/],
			    #                 	vals => [0],			                    	
			    #                 },			                    
			    #                 labels => '<%= $col %>',
							# 		# sub {my ($el,$dv) = (@_);return sprintf("%s - %s %s - %s", $dv->{x} || 'N/A', $dv->{x}, $dv->{x}, $dv->{x});},
			    #                 vals => "<%= $col %>",
			    #                 data => [qw//],
			    #               },			      
			    #   title => "<%= $col %>",
			    #   type => "select",
			    #   vals => [],
			    #   data => []
			# },<% } %><% } %>
	
    	},
	};

	my $aform = dclone $fform;
	$aform->{attrs}->{name} = '<%= $module %>addform';
	$aform->{attrs}->{formon} = 'form-always';
	$aform->{attrs}->{formoff} = 'form-never';

	$c->{_forms}->{default} = $c->form($fform);
	$c->{_forms}->{add} = $c->form($aform);

	$c->{_buttongroup}->{add} = $c->form([
			{
				type => 'buttongroup',
				attrs => [{
					class => 'btn btn-success',
					name => 'add',
					type => 'button'
				},					
				],
				labels => ["Add Record"],
			},
	]);

	$c->{_buttongroup}->{default} = $c->form([
			{
				type => 'buttongroup',
				class => 'form-off',
				attrs => [{
					class => 'btn btn-warning',
					name => 'edit',
					type => 'button'
				},	
				{
					class => 'btn btn-danger',
					name => 'delete',
					type => 'button'
				},							
				],
				labels => ["Edit","Delete"],
				# vals => [qw/save reset/],
			},		
		    {
				type => 'buttongroup',
				class => 'form-on',
				attrs => [{
					class => 'btn btn-success',
					name => 'save',
					type => 'button'
				},
				{
					class => 'btn btn-default ',
					name => 'close',
					type => 'button',
					'data-dismiss' => 'modal'
				},
				{
					class => 'btn btn-warning form-cancel',
					name => 'cancel',
					type => 'button'
				},				
				],
				labels => ["Save","Close","Cancel"],
				# vals => [qw/save reset/],
			},

	]);

}

1;