#!/usr/bin/perl

use strict;
use warnings;
use open ':std', ':encoding(UTF-8)';

use Git;
use JSON::XS;
use DateTime;
use FileHandle;
use Array::Utils qw(:all);
use Digest::MD5  qw(md5 md5_hex md5_base64);
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::NameCase;
use Orchard::DB::Connect;
use Orchard::Accounting::JIRA;
use Orchard::ETL::Extract::CSV;

my $dbuser = 'ACC-6283-1';

## db connections
my $dbx = Orchard::Session::getdbx('abacusqa');
my $dbh = Orchard::Session::getdbh('abacusqa');

my $sth = $dbh->prepare(
    qq{
SELECT DISTINCT
    ct.contract_id,
    TRIM(BOTH '"' FROM JSON_EXTRACT(ct.attachments_relations, '\$.contributor_ids[0]'))
FROM contract_term ct
WHERE JSON_EXTRACT(ct.attachments_relations, '\$.contributor_ids[0]') IS NOT NULL
-- AND ct.contract_id=533433
ORDER BY 2
}
);
$sth->execute();

my $data;
if ( $sth->rows ) {
    my $cnt = $sth->rows;
    my $i   = 0;
    while ( my $row = $sth->fetchrow_arrayref() ) {
        my $idx = sprintf( "(%04d/%04d)", ++$i, $cnt );
        my ( $cid, $cnid ) = @{$row};

        ## logMessage( 'info', "$idx Looking contributor:$cnid on contract: $cid" );

##        my $cp = $dbx->resultset('RoyaltyAccounting::ContractParty')->search( {
##                'contract_id' => $cid,
##                'target_id'   => $cnid,
##                'target_type' => 'contributor'
##            }
##        )->first;
        my $cp;

        if ( not defined $cp ) {
            push @{$data}, "(NULL,$cid,'contributor','$cnid',NOW(),'$dbuser',NOW(),'$dbuser',NULL,NULL)";
        } else {
            logMessage( 'info1', $cp->contract_party_id . " already exists for contract: $cid" );
        }
    }
}

my $values = join ",\n", @{$data};

print <<"!";
-- liquibase formatted sql

-- changeset jgetter:1
INSERT INTO contract_party VALUES 
$values;

--rollback DELETE FROM contract_party WHERE created_by='$dbuser';
--rollback DELETE FROM schedule WHERE created_by='$dbuser';
!

__END__
            logMessage( 'info1', "adding contributor:$cnid to contract:$cid in contract_party" );
            $cp = $dbx->resultset('RoyaltyAccounting::ContractParty')->create( {
                    'contract_id'      => $cid,
                    'target_type'      => 'contributor',
                    'target_id'        => $cnid,
                    'created_at'       => Orchard::Session::mysql_now,
                    'created_by'       => $dbuser,
                    'last_modified'    => Orchard::Session::mysql_now,
                    'last_modified_by' => $dbuser
                }
            );
