#!/usr/bin/perl

use constant 'SQLBY' => 'knr_sax_ingestion';

use strict;
use warnings;

use Git;
use JSON::XS;
use FileHandle;
use Array::Utils qw/:all/;
use List::MoreUtils qw(uniq);
use DateTime::Format::DateParse;
use Text::CSV::Easy(qw/csv_build csv_parse/);
use Getopt::Long::Descriptive(qw/describe_options/);

use lib '/var/app/orchard/collab/jgetter/perllib';
use Orchard::Session;
use Orchard::DB::Connect;
use Orchard::ETL::Extract::CSV;
use Orchard::ETL::Extract::SpreadSheet;

my $db = 'abacusprod';

my $ipid_ctc = {
    'IP38576'  => [ 64523, 64524, 64525 ],
    'IP38867'  => [ 65997, 65998 ],
    'IP573292' => [ 66023, 66024 ],
    'IP58058'  => [ 66792, 66793, 66794, 66795 ],
    'IP589136' => [64267],
    'IP589500' => [ 59941, 59942, 59943 ],
    'IP589594' => [ 66961, 66962 ],
    'IP589686' => [ 58765, 58766, 58767 ],
    'IP589730' => [69429],
    'IP589735' => [68006],
    'IP590162' => [58613],
    'IP590383' => [66871],
    'IP590491' => [ 58844, 58845 ]
};

my $updates = {
    'IP589136' => [73],
    'IP667520' => [73],
    'IP38576'  => [73],
    'IP589730' => [73],
    'IP589686' => [87],
    'IP935943' => [ 73, 76 ],
    'IP592272' => [73],
    'IP589500' => [73],
    'IP590383' => [75],
    'IP590162' => [75],
    'IP463502' => [73],
    'IP58058'  => [87],
    'IP888268' => [87],
    'IP589594' => [87],
    'IP590491' => [73],
    'IP589735' => [73],
    'IP573292' => [73],
    'IP38867'  => [73],
};

logMessage( 'info', "Connecting to $db" );
my $dsn = Orchard::DB::Connect->dsn($db);
my $dbh;
if ( defined $dsn->{'ssh'} ) {
    my $ssh = $dsn->{'ssh'};
    $ssh->{'net'}->spawn( $ssh->{'tunnel'} );
    sleep 1;
}
$dbh = DBI->connect( @{ $dsn->{'conn'} } ) || die "Conn: $DBI::errstr";
my $dbx = Orchard::Session::getdbx($db);

foreach my $k ( keys %{$ipid_ctc} ) {
    my $rset = $dbx->resultset('RoyaltyAccounting::ContractTermCondition')
      ->search( { 'contract_term_condition_id' => { '-in' => [ sort @{ $ipid_ctc->{$k} } ] } } );

    while ( my $row = $rset->next ) {
        my $href   = JSON::XS::decode_json( $row->conditions );
        my $ttypes = $href->{'transaction_types'};
		my $xref   = [ intersect( @{$ttypes}, @{ $updates->{$k} } ) ];
        my $exists = scalar @{$xref} ? 1 : 0;

        if ($exists) {
            logMessage('error',$row->id . ' ctc already transactions ' . ( join ',', @{ $updates->{$k} } ));
            next;
        } else {

            my $new_ttypes = [ @{$ttypes}, @{ $updates->{$k} } ];

            #my $new_ttypes = [ uniq( @{ $href->{'transaction_types'} } ) ];
            $href->{'transaction_types'} = [ sort @{$new_ttypes} ];
            my $json = JSON::XS::encode_json($href);

            $row->conditions($json);
            $row->last_modified(mysql_now);
            my $_row = $row->update;
            my $x;
        }
    }
}
