package NGIS;

# common data file shared by HILIS4/t/ngis_requests.t and
# Fileuploader-D2/t/ngis_requests.t

use Moo;
use Data::Printer;
use Types::Standard 'InstanceOf';
has dbix => ( is => 'ro', required => 1, isa => InstanceOf['DBIx::Simple'] );

sub run { # new db entries:
    my $self = shift;
    my @ngis_ids = @_;

    my $ngis_id_1 = $ngis_ids[0];
    my $ngis_id_2 = $ngis_ids[1];

    my $dbix = $self->dbix; # check using correct db:
    die 'wrong db' unless $dbix->query('SELECT DATABASE()')->list eq 'lims_test';

    # GeNEQ location (check it exist or create new):
    unless ( $dbix->select( 'referral_sources', 1,
            { organisation_code => 'GENEQN' } )->list ) {
        $dbix->insert('parent_organisations', { parent_code => 'GENEQN',
            description => 'YNEGLH NEWCASTLE', referral_type_id => 3 });
        my $parent_id = $self->last_insert_id('parent_organisations');
        my %h = ( display_name => 'YNEGLH Newcastle', organisation_code => 'GENEQN',
            parent_organisation_id => $parent_id, referral_type_id => 3 );
        $dbix->insert('referral_sources', \%h);
    }
    unless ( $dbix->select( 'referral_sources', 1,
            { organisation_code => 'GENEQS' } )->list ) {
        $dbix->insert('parent_organisations', { parent_code => 'GENEQS',
            description => 'YNEGLH SHEFFIELD', referral_type_id => 3 });
        my $parent_id = $self->last_insert_id('parent_organisations');
        my %h = ( display_name => 'YNEGLH Sheffield', organisation_code => 'GENEQS',
            parent_organisation_id => $parent_id, referral_type_id => 3 );
        $dbix->insert('referral_sources', \%h);
    }
    # referrer & referrer_department for GeNEQ location (check exist or create new):
    unless ( $dbix->select( 'referrers', 1,
            { national_code => 'C2345678' })->list ) {
        $dbix->insert('referrers', { name => 'White A', national_code => 'C2345678',
            referral_type_id => 1 });
        my $ref_id = $self->last_insert_id('referrers');
        $dbix->select('parent_organisations', 'id', { parent_code => 'GENEQN' })
            ->into(my $parent_id);
        $dbix->insert('referrer_department', { parent_organisation_id => $parent_id,
            referrer_id => $ref_id, hospital_department_code => 823 }); # haem OK for this
    }
    # referrer & referrer_department for GeNEQ location (check exist or create new):
    unless ( $dbix->select( 'referrers', 1,
            { national_code => 'C3456789' })->list ) {
        $dbix->insert('referrers', { name => 'Silver A', national_code => 'C3456789',
            referral_type_id => 1 });
        my $ref_id = $self->last_insert_id('referrers');
        $dbix->select('parent_organisations', 'id', { parent_code => 'GENEQS' })
            ->into(my $parent_id);
        $dbix->insert('referrer_department', { parent_organisation_id => $parent_id,
            referrer_id => $ref_id, hospital_department_code => 823 }); # haem OK for this
    }
    # register 2 new request_form rows (if not already):
    unless ( $dbix->select('request_form', 1, {id => $ngis_id_2} )->list ) {
        my $ref_src_id = $dbix->select('referral_sources', 'id',
            { organisation_code => 'GENEQN' })->list;
        my %h = ( # patient already registered in patients:
            id => $ngis_id_2, last_name => 'brown', first_name => 'stan',
            dob => '1960-04-10', gender => 'M', nhs_number => 2222222222,
            location_name => 'YNEGLH Newcastle', location_id => $ref_src_id,
            user_id => 1, referrer => 'White A [Molecular Genetics]',
            requested_by => 'Black T'
        ); # p %h;
        $dbix->insert('request_form', \%h) or die $dbix->error;
    }
    unless ( $dbix->select('request_form', 1, {id => $ngis_id_1} )->list ) {
        my $ref_src_id = $dbix->select('referral_sources', 'id',
            { organisation_code => 'GENEQS' })->list;
        my %h = ( # patient doesn't already exist:
            id => $ngis_id_1, last_name => 'gray', first_name => 'olive',
            dob => '1966-07-11', gender => 'F', nhs_number => 3333333333,
            location_name => 'YNEGLH Sheffield', location_id => $ref_src_id,
            user_id => 1, referrer => 'Silver E [Molecular Genetics]',
            requested_by => 'Brown S'
        ); # p %h;
        $dbix->insert('request_form', \%h) or die $dbix->error;
    }
}

sub last_insert_id { $_[0]->dbix->query('select max(id) from '.$_[1])->list }

1;
