package sqlConn;

# use DBIx::Log4perl;
# use DBI::Profile;
use Moo;
use MooX::HandlesVia;
use DBD::Pg;
use DDP;

use v5.26;
use feature 'signatures';
no warnings qw(experimental::signatures);

has 'db'   			=> ( is => 'rw', required => 1 );
has 'dbh'  			=> ( is => 'lazy' );
has 'sql'  			=> ( is => 'rw',  trigger => \&_build_results );
has 'bind'			=>  (is => 'rw' );
has 'results' 		=> ( is => 'lazy', );
has 'column_names' 	=> ( is => 'ro', writer => '_set_column_names');

# my $logconf;
# my $log;
# if (-e 'N:\conversion\Automation\Packages') {
# 	$logconf = 'N:\conversion\Automation\Logs\log.conf';
# 	$log = 'generic';
# 	}
# else {
# 	$logconf = '/mnt/cvgserver2/conversion/Automation/Logs/log_linux.conf';
# 	$log = 'linux';
# 	}
#
# say "using $log logging:  $logconf";
#
# Log::Log4perl->init( $logconf );
# my $logger = Log::Log4perl->get_logger($log);

my %db_conn = (
	pc => {
		database => 'nehantic_data',
		host => 'nehantic-dev.cnxhiwukntah.us-east-1.rds.amazonaws.com',
		# host => 'localhost',
		port => '5432',
		user => 'pc',
		pass => 'ydY4&Hz4p4j4^h',
		dsn => "DBI:Pg:dbname=",
	},
	superbase => {
		database => 'superbase',
		# host => 'nehantic-dev.cnxhiwukntah.us-east-1.rds.amazonaws.com',
		host => 'localhost',
		port => '5432',
		user => 'superfly',
		pass => 'C33ucme!',
		dsn => "DBI:Pg:dbname=",
	},
);

sub _build_dbh {
    my $self = shift;
    my $db = $self->db;
	my $database = $db_conn{$db}->{'database'} // '';
    my $host = $db_conn{$db}->{'host'} // '';
    my $port = $db_conn{$db}->{'port'} // '';
    my $user = $db_conn{$db}->{'user'};
    my $password = $db_conn{$db}->{'pass'};
	my $dsn = $db_conn{$db}->{'dsn'} . "$database;host=$host;port=$port";

	my $dbh;

	#if ($db eq 'qb') {
	#	say $db_conn{$db}->{'dsn'};
	#	$dbh = DBI->connect('dbi:ODBC:QB64') || $logger->logdie("couldn't connect to source database: $!");
	#}

	#elsif ($db eq 'infor') {
		# say $db_conn{$db}->{'dsn'};
		# $dbh = DBIx::Log4perl->connect($db_conn{$db}->{'dsn'}, $db_conn{$db}->{'user'}, $db_conn{$db}->{'pass'}) || $logger->logdie("couldn't connect to source database: $!");
	# }

	# elsif ($db_conn{$db}->{'conn_str'}) {
	# 	$dbh = DBIx::Log4perl->connect($db_conn{$db}->{'conn_str'}, {
	# 		'PrintError' => 0,
	# 		'RaiseError' => 1,
	# 		'AutoCommit' => 1,
	# 		});
	# 	}
	#
	# else {
	# 	$dbh = DBIx::Log4perl->connect($dsn, $user, $password, {
		$dbh = DBI->connect($dsn, $user, $password, {
			'PrintError' => 1,
			'RaiseError' => 1,
			'AutoCommit' => 1,
			});
		# }

	$dbh->{Profile} = 0;

	return $dbh;
	}

sub _build_results {
	my $self = shift;
	my $dbh = $self->dbh;
	my $sql = $self->sql;
	my $sth = $dbh->prepare($sql);
	my $bind;

	if ($self->bind) {
		$sth->execute($bind);
		}
	else {
		$sth->execute();
		}

	$self->_set_column_names($sth->{NAME});
	return $sth->fetchall_arrayref;
}

sub triggers ($self) {
	my $sql = qq{
		SELECT tgrelid::regclass triggername, t.tgname tablename
		FROM pg_trigger t, pg_proc p, pg_class c
		WHERE c.oid = t.tgrelid AND t.tgfoid=p.oid
		  AND c.relkind = 'r'
		  };
	$self->sql($sql);
}

sub tables ($self) {
	my $sql = qq{
		SELECT table_schema || '.' || table_name "tablename"
		FROM information_schema.tables
		WHERE table_type = 'BASE TABLE'
			AND table_schema NOT IN ('pg_catalog', 'information_schema')
		};
	$self->sql($sql);
}

#__PACKAGE__->meta()->make_immutable();
