# dump chr region from db
# useful for making a test region etc.
#
# writes tab-delimited text files for
#    contig
#    clone
#    assembly
#    chromosome
#    dna


use strict;
use Bio::EnsEMBL::DBSQL::DBAdaptor;


my $chr_name = '';
my $chr_start = ;   # -1 to start at chr start
my $chr_end = ;     # -1 to end at chr end
my $type = '';

die "Must have an assembly type" unless $type;
die "Must have an chromosome name" unless $chr_name;
die "Must have an chromosome start" unless $chr_start;
die "Must have an chromosome end" unless $chr_end;

open SGP, "> assembly.out" or die "canna open file";
open DNA, "> dna.out" or die "canna open file";
open CLONE, "> clone.out" or die "canna open file";
open CTG, "> contig.out" or die "canna open file";
open CHR, "| sort -u > chromosome.out" or die "canna open file";

$, = "\t";

my $src = Bio::EnsEMBL::DBSQL::DBAdaptor->new(
    -dbname => '',
    -host   => '',
    -user   => 'ensro'
);

my $sth = $src->prepare(qq{
    SELECT a.*, c.*
    FROM   assembly a, chromosome c
    WHERE  c.name = ?
    AND    a.chromosome_id = c.chromosome_id
    AND    a.type = ?
    ORDER  by a.chr_start
});

$sth->execute($chr_name, $type);

my @contigs;
my @row;

while (@row = $sth->fetchrow_array) {
    my (@sgp) = @row[0 .. 11];
    my (@chr) = @row[12 .. 18];
    my ($ctg, $start, $end) = @sgp[2, 3, 4];

    next if $start < $chr_start && $chr_start >= 0;
    last if $end > $chr_end && $chr_end >= 0;

    push @contigs, $ctg;
    print SGP @sgp, "\n";
    print CHR @chr, "\n";
}

my $where = '(' . join(',', @contigs) . ')';

my $sth = $src->prepare(qq{
    SELECT *
    FROM   contig
    WHERE  contig_id in $where
});

$sth->execute();

while (@row = $sth->fetchrow_array) {
    print CTG @row, "\n";
}

my $cmd = qq{
    SELECT distinct clone.*
    FROM   clone, contig
    WHERE  contig.contig_id in $where
    AND    clone.clone_id = contig.clone_id
};
# print "$cmd\n";

my $sth = $src->prepare(qq{
    SELECT distinct clone.*
    FROM   clone, contig
    WHERE  contig.contig_id in $where
    AND    clone.clone_id = contig.clone_id
});

$sth->execute();

while (@row = $sth->fetchrow_array) {
    print CLONE @row, "\n";
}

my $sth = $src->prepare(qq{
    SELECT dna.*
    FROM   dna, contig
    WHERE  contig.contig_id in $where
    AND    dna.dna_id = contig.dna_id
});

$sth->execute();

while (@row = $sth->fetchrow_array) {
    print DNA @row, "\n";
}

close DNA;
close SGP;
close CTG;
close CLONE;
close CHR;

$sth->finish;

$src->DESTROY;
