package Consent;

use Moose;
    with qw(
        Role::RebuildTables
    );
use namespace::clean -except => 'meta';

has db  => (is => 'ro', isa => 'HashRef', required => 1);
has sql => (is => 'ro', isa => 'HashRef', required => 1);

has consent_map => ( is => 'ro', isa => 'HashRef', lazy_build => 1 );

__PACKAGE__->meta->make_immutable;

use Data::Dumper;

my @tables = qw(
    request_consent
);

$|++;

sub convert {
    my $self = shift; # warn Dumper $self;

    my $dbix3 = $self->db->{dbix3};
    my $dbix4 = $self->db->{dbix4};

    $self->rebuild_tables(\@tables);
    
    my $consents = $self->consent_map;
    
    my $sql = q!select HMDS, year(Date) as 'year', Store, Research, Treatment,
        Monitor from Main,Consent where DBID = Con_ID!;
        
    my $src = $dbix3->query( $sql );
    while ( my $vals = $src->hash ) {
		my $request_id = $dbix4->query( q!select id from requests where request_number
			= ? and year = ?!, $vals->{hmds}, $vals->{year})->list;
        
		foreach my $c( keys %$consents ) {
			next unless $vals->{$c};
			
			my %data = (
				request_id => $request_id,
				consent_id => $consents->{$c},
                status     => $vals->{$c},
			);
			$dbix4->insert('request_consent', \%data);
		}		
    }
    $self->convert_to_InnoDB($_) for @tables;
}

sub _build_consent_map {
    my $self = shift;
    
    my $dbh4  = $self->db->{dbix4};
    
    my $consents = $dbh4->query( 'select consent_name, id from consent_options')->map;
    
    return $consents;
}

1;
