#!/usr/bin/perl

# $ENV{DBIC_TRACE}=1;
use JSON;
use strict;
use Data::Show;
use Mojo::Template;
my $basepath = '/home/sites/clm.dmadelivers.com/www/clmapp/';
use lib "/home/sites/clm.dmadelivers.com/www/clmapp/lib";
$ENV{MOJO_TEMPLATE_DEBUG}=1;
use CLMApp::Schema;
CLMApp::Schema->load_components(qw/
    TableNames
/);
my $dbix = CLMApp::Schema->connect("dbi:mysql:host=rds1.dmadelivers.com;db=dmaclm", 'dmaclm', '3lUz1OV2!',{unsafe=>1,RaiseError=>0,PrintError=>1});

my $modules;
my $tables;

my $sources;
my $schema = $dbix;
# show $schema->sources;
my @controllers;
for my $source_name ($schema->sources) {
push(@controllers, $source_name);	
	# next unless $source_name =~ /TabSeries/;

	show $source_name;
	my $result_source = $schema->source($source_name);
	$sources->{$source_name}->{table} = $source_name;
	$sources->{$source_name}->{pk} = $result_source->_primaries ? $result_source->_primaries->[0] : ""; 
    for my $column_name ($result_source->columns) {
        my $cinfo = $result_source->column_info($column_name);
        $sources->{$source_name}->{pk} ||= $column_name;
        $cinfo->{column_name} = $column_name;
        push(@{ $sources->{$source_name}->{columns} }, $cinfo);
        push(@{ $sources->{$source_name}->{column_order} }, $column_name);
    }
}
# show sort(@controllers);
my $app = 'CLMApp';

my $mt = Mojo::Template->new(vars => 1);
my $cnt = 0;
foreach my $table (keys %$sources){
	my $tb = $sources->{$table};

	my $module = $table; $module =~ s/^tab//i; # $module =~ s/[a-z]//g;
	my $title = $module; $title =~ s/[a-z0-9]+(?=[A-Z])\K/ /gx;
	my $controller = $module;
	$module = lc($module);
	my $lcapp = lc($app);
	# show $tb->{columns};
	show $tb->{table}, $module;
# table => TabToDo
# module => todo 
# title => ToDo

	next unless $module =~ /CustomerComment/i;

	my $obj = {

		title =>  $title,
		controller => $controller,
		table => $tb->{table},
		module => $module,
		pk => $tb->{pk},
		columns => $tb->{column_order},
		prefetch => [qw//],
		order_by => [qw//],
		app => $app,
		lcapp => $lcapp
	};

show $obj;

	my $modulepm = $mt->render_file($basepath . '/templates/code/module.pm',$obj);
	open(MODULEPM, ">$basepath/lib/$app/Controller/$controller.pm") || die "$!";
	print MODULEPM $modulepm;
	close(MODULEPM);
	
	my $modulejs = $mt->render_file($basepath . '/templates/code/module.js',$obj);
	open(MODULEJS, ">$basepath/public/js/$lcapp.$module.js") || die "$!";
	print MODULEJS $modulejs;
	close(MODULEJS);

	my $routeop = $mt->render_file($basepath . '/templates/code/routes.pl',$obj);
	my $jsmodule = $mt->render_file($basepath . '/templates/code/script.js',$obj);
	# if($cnt == 0){
	# 	open(ROUTESPL, ">$basepath/lib/routes.pl") || die "$!";
	# 	open(JSMODULE, ">$basepath/templates/snippets/jsmodule.html.ep") || die "$!";
	# }else{
		open(ROUTESPL, ">>$basepath/lib/routes.pl") || die "$!";
		open(JSMODULE, ">>$basepath/templates/snippets/jsmodule.html.ep") || die "$!";
	# }
	print ROUTESPL $routeop;
	print JSMODULE $jsmodule;
	close(ROUTESPL);
	close(JSMODULE);
	

	$cnt++;

}

1;