#!/usr/bin/perl -w
use strict;

use lib '/data/shared/pgn_data_processing/scripts/perllib';

use runtime;
use db_link;
use projects;

@ARGV or die "No input files!";

my %EDITS = ();
my %PEP = ();
my @TEXT;
my @elements;
my %args = ();

my @arg_pairs = split (/\-/, join(' ', @ARGV));

foreach (@arg_pairs){
  $_ or next;
  my ($flag, $val) = split /\s+/;
  $args{$flag} = $val;
}

my $text = $args{'c'};
my $edits = $args{'e'};
my $pep = $args{'p'};
my $project = $args{'p'};

$project ||= "cgn";

my ($db,$usr) = @{projects::get_db_info($project)};
$db or die "No database for project $project!";


my $dbh = db_link::connect_db($db,$usr) or die "couldn't open database link!\n";
my ($stm, $sth, $rv, $rc);


my $start_time = time;

if ($text){
open (TEXTFILE, "$text") or die "Couldn't open cds_text!";
while (<TEXTFILE>){
  chomp;
  push @TEXT, $_;
}
}

if ($edits){
open (EDITFILE, "$edits") or die "Couldn't open edits!";
while (<EDITFILE>){
    chomp;
    @elements = split;
    $EDITS{$elements[0]} = $elements[1];
  }

close EDITFILE;
}


if ($pep){
open (PEPFILE, "$pep") or die "Couldn't open pep!";
while (<PEPFILE>){
    chomp;
    @elements = split;
    $PEP{$elements[0]} = $elements[1];
  }

close PEPFILE;
}

if ($text){

  foreach (@TEXT) {
    $_  or next;
    @elements = split;
    $stm = "insert into cds (unigene_id, score, begin, end, forward_reverse, seq_text) values ('$elements[0]','$elements[1]','$elements[2]','$elements[3]','$elements[4]', '$elements[5]')";
    $sth = $dbh->prepare($stm) || die "Can't execute statement: $DBI::errstr";
    $rv = $sth->execute;
  }
}

if ($edits){
  
  foreach (keys %EDITS) {
    $EDITS{$_} or next;

    $stm = "update cds set seq_edits = '$EDITS{$_}' where unigene_id = $_";
    $sth = $dbh->prepare($stm) || die "Can't execute statemanet: $DBI::errstr";
    $rv = $sth->execute || die "Can't execute statement: $DBI::errstr";
  }
}

if ($pep) {
  
  foreach (keys %PEP) {
    $PEP{$_} or next;

    $stm = "update cds set seq_edits = '$PEP{$_}' where unigene_id = $_";
    $sth = $dbh->prepare($stm) || die "Can't execute statemanet: $DBI::errstr";
    $rv = $sth->execute || die "Can't execute statement: $DBI::errstr";
  }
}

db_link::disconnect_db($dbh);

print "Running...\n";
runtime::runtime_print($start_time, "Done");
