use strict;
use warnings;

use lib 'lib';
use OpenResty::Config;

my $reason;
BEGIN {
    OpenResty::Config->init('.');
    if ($OpenResty::Config{'backend.type'} ne 'PgFarm') {
        $reason = 'backend.type in the config files is not PgFarm.';
    }
}
use Test::More $reason ? (skip_all => $reason) : 'no_plan';

use OpenResty::Backend::PgFarm;
use Data::Dumper;
use subs 'dump';

my $backend = OpenResty::Backend::PgFarm->new({ RaiseError => 0 });
ok $backend, "database handle okay";
if ($backend->has_user("agentz")) {
    #    $backend->do("drop table test cascade");
    $backend->drop_user("agentz");
}

ok ! $backend->has_user("agentz"), "agentz has indeed been removed";

my $res = $backend->add_user("agentz", 'blahblahblah');
cmp_ok $res, '>', -1, "user added okay";

$backend->set_user("agentz");

$res = $backend->has_user("agentz");
ok $res, "user has registered!";

$res = $backend->set_user("agentz");
#ok $res, "user switched";

$res = $backend->do("create table test (id serial, body text)");
#ok $res, "table created";
cmp_ok $res, '>', -1;

$res = $backend->do("insert into test (body) values ('hello world')");
#ok $res, "insert a record";
is $res, '1', 'rows affected';

$res = $backend->last_insert_id("test");
ok $res, "get last insert id";
is $res, 1, "last id okay";

$Data::Dumper::Sortkeys = 1;
$Data::Dumper::Indent = 0;
$res = $backend->select('select * from test');
is dump($res), "[['1','hello world']];";

$res = $backend->select('select * from test', { use_hash => 1 });
is dump($res), "[{'body' => 'hello world','id' => '1'}];";

$res = $backend->do("insert into test (body) values ('hello world');\ninsert into test (body) values ('blah');");
ok $res, "insert 2 records";
is $res, '1', 'rows affected';

$res = $backend->do("update test set body=body||'aaa';");
ok $res, "insert 2 records";
is $res, '3', 'rows affected';

$res = $backend->select('select * from test');
is dump($res), "[['1','hello worldaaa'],['2','hello worldaaa'],['3','blahaaa']];";

$res = $backend->select('select * from test', {use_hash => 1});
is dump($res), "[{'body' => 'hello worldaaa','id' => '1'},{'body' => 'hello worldaaa','id' => '2'},{'body' => 'blahaaa','id' => '3'}];";

$res = $backend->do("insert into test (body) values (null);");
ok $res;

$res = $backend->select('select * from test', {use_hash => 1});
is dump($res), "[{'body' => 'hello worldaaa','id' => '1'},{'body' => 'hello worldaaa','id' => '2'},{'body' => 'blahaaa','id' => '3'},{'body' => undef,'id' => '4'}];";

$res = $backend->do("drop table test cascade");
is $res+0, '0', "table dropped";

sub dump {
    my $var = shift;
    my $s = Dumper($var);
    $s =~ s/^\$VAR1\s*=\s*//;
    $s
}

