#!/usr/bin/perl
use strict;
use warnings;

use Data::Dumper;

{
    package My::Test::DB;

    use base 'Class::DBI';

    our $db_file = 'my-test-db';
    my $dsn = 'dbi:SQLite:dbname=' . $db_file;
    __PACKAGE__->connection($dsn, '', '');
}


{
    package Film;

    use base 'My::Test::DB';

    __PACKAGE__->table('Movies');
    __PACKAGE__->columns('Primary',   'Title');
    __PACKAGE__->columns('Essential', qw( Title ));
    __PACKAGE__->columns('Directors', qw( Director CoDirector ));
    __PACKAGE__->columns('Other',     qw( Rating NumExplodingSheep HasVomit ));

#		DROP TABLE IF EXISTS Movies;
    system 'sqlite3', $My::Test::DB::db_file, <<HERE ;
		DROP TABLE Movies;
		CREATE TABLE Movies (
		title                   VARCHAR(255),
		director                VARCHAR(80),
		codirector              VARCHAR(80),
		rating                  CHAR(5),
		numexplodingsheep       INTEGER,
		hasvomit                CHAR(1)
		);
HERE

    sub create_test_film { 
	return shift->create({
		Title             => 'Bad Taste',
		Director          => 'Peter Jackson',
		Rating            => 'R',
		NumExplodingSheep => 1,
	});
    }

    sub accessor_name {
#    sub accessor_name_for {
	my ($class, $col) = @_;
	return "sheep" if lc $col eq "numexplodingsheep";
	return $col;
    } 

} # end package Film

#warn "sqlite3 $My::Test::DB::db_file 'select * from Movies;'\n";

    my $rec = Film->retrieve('my title');
warn 'rec ', Dumper($rec);

    my $data_template = {
	Title    => 'Bad Taste',
	Director => 'Peter Jackson',
	Rating   => 'R',
    };


    my $data_copy = { %$data_template };
    $data_copy->{sheep} = 2;
#    $data_copy->{NumExplodingSheep} = 2;

#    my $bt = Film->insert($data_copy);
    my $bt = Film->create($data_copy);
    die "Modified accessor - with accessor" unless defined $bt;
    die "Modified accessor - with accessor - bad class" unless $bt->isa("Film");

warn 'bt1 ', Dumper($bt), "\n";
#warn 'bt NumExplodingSheep ', $bt->NumExplodingSheep, "\n";
warn 'bt sheep ', $bt->sheep, "\n";

    die 'sheep bursting violently' unless $bt->sheep == 2;
warn 'bt2 ', Dumper($bt), "\n";

system "sqlite3 $My::Test::DB::db_file 'select * from Movies;'";
