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

use db_link;
use projects;

my @arg_pairs = split (/\-/, (join ' ', @ARGV));
my %args=();
my @unigene_build_ids;
foreach (@arg_pairs){
	$_ or next;
	my ($flag, @val)=split /\s+/;
	if ($flag eq 'b') {
		@unigene_build_ids=@val;
	}
	$args{$flag}=$val[0];
}
my $project=$args{'p'};
my $set=$args{'b'};

$project or die "You must set the project with the -p flag.\n";
$set or die "You must select the unigene build IDs with the -b flag.\n";

my $outfile = "${project}_unigene_build";

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

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

foreach my $id (@unigene_build_ids) {

	print STDERR "Getting build nr $id...\n";
	my $seqcount = 0;
	open (F, ">${outfile}.$id.fasta") || die "Can't open ${outfile}.$id.fasta";

# get unigene assemblies
	my $query = "SELECT unigenes.unigene_id, unigene_assembly_sequence.sequence_data 
	FROM unigenes, unigene_assembly_sequence 
	WHERE unigenes.unigene_element_id=unigene_assembly_sequence.unigene_assembly_id and unigenes.unigene_build_id=$id and unigenes.unigene_element_type_id=1 order by unigene_id";

	my $sth = $dbh -> prepare($query);

	$sth -> execute();

	while (my ($unigene_id, $sequence) = $sth -> fetchrow_array()) {
		print F ">$unigene_id\n$sequence\n";
		$seqcount++;
	}

# get unigene singletons

	my $query2 = "SELECT unigenes.unigene_id, trimmed_sequence.sequence_data
	FROM unigenes, unigene_singleton, trimmed_sequence
	WHERE unigenes.unigene_element_id=unigene_singleton.unigene_singleton_id and unigene_singleton.trimmed_seq_id=trimmed_sequence.trimmed_seq_id and unigenes.unigene_element_type_id=2 and unigenes.unigene_build_id=$id order by unigene_id";

	my $sth2 = $dbh -> prepare($query2);

	$sth2 -> execute();

	while (my ($unigene_id, $sequence) = $sth2 -> fetchrow_array()) {
		print F ">$unigene_id\n$sequence\n";
		$seqcount++;
	}

	close (F);
	print STDERR "Wrote $seqcount sequences to file.\n";
}

db_link::disconnect_db($dbh);

