#!/usr/bin/perl

{

    package My::DB;

    use base qw(Rose::DB);

    My::DB->register_db(
        driver           => 'Pg',
        database         => 'test',
        username         => 'postgres',
        password         => '',
        server_time_zone => 'UTC',
    );
}

{

    package User;

    use base qw(Rose::DB::Object);

    __PACKAGE__->meta->table('rose_test_users');

    __PACKAGE__->meta->columns(
        id         => { type => 'serial',  not_null => 1 },
        login      => { type => 'varchar', length   => 45 },
        password   => { type => 'chkpass' },
    );

    __PACKAGE__->meta->primary_key_columns( ['id'] );

    __PACKAGE__->meta->add_unique_keys( ['login'] );

    __PACKAGE__->meta->initialize;

    sub init_db { My::DB->new }
}

# Create Table

my $db = My::DB->new;

$db->dbh->do(<<'');
CREATE TABLE rose_test_users (
    id serial NOT NULL PRIMARY KEY,
    login character varying(45),
    "password" chkpass,
    UNIQUE (login)
);




$Rose::DB::Object::Debug = 1;

{
    my $user = User->new( login => 'test', password => '123' );
    $user->save;

    print "New User just created\n";
    print "\tpassword: ",           $user->password,           "\n";
    print "\tpassword_encrypted: ", $user->password_encrypted, "\n";

    $user->login('test2');
    $user->save;

    print "New User after first save\n";
    print "\tpassword: ", $user->password, "\n";
    print "\tpassword_encrypted: ", $user->password_encrypted, "\n";
}

{
    my $user = User->new( login => 'test2' );
    $user->load;

    print "Reloading User from DB\n";
    print "\tpassword: ",           $user->password,           "\n";
    print "\tpassword_encrypted: ", $user->password_encrypted, "\n";

    $user->login('test');
    $user->save;

    print "Reloaded User after change to login and save\n";
    print "\tpassword: ", $user->password, "\n";
    print "\tpassword_encrypted: ", $user->password_encrypted, "\n";
}

{
    my $user = User->new( login => 'test' );
    $user->load;

    print "Reload User from DB again\n";
    print "\tpassword: ",           $user->password,           "\n";
    print "\tpassword_encrypted: ", $user->password_encrypted, "\n";
}

END {

    $db->dbh->do(<<'');
    DROP TABLE rose_test_users;

};
