#!/usr/local/bin/perl5 -w

# usage: split_fasta n_files fasta_file outdir

(($n_files = shift @ARGV) && ($fasta = shift @ARGV) && ($outdir = shift @ARGV)) ||
    die "usage: split_fasta n_files fasta_file outdir\n";

$id_lines_wc = `grep '^>' $fasta | wc`;

($n_orfs) = ($id_lines_wc =~ /\s*(\d+)\s/);

$n_per_file = int($n_orfs / $n_files) + 1;

print "nfiles = $n_files\nnorfs = $n_orfs\nnpf = $n_per_file\n"; 

(-d $outdir) || die "$outdir is not a directory\n";

if ($fasta =~ /(.+)\.fasta/)
{
    $name = $1;
}
else
{
    $name = $fasta;
}

$/ = "\n>";

open(FASTA, "<$fasta") ||
    die "could not open fasta file";

$i = 1;
$j = 1;

print "\n\n$i\n";

while (defined($rec = <FASTA>))
{
    $rec =~ s/^>//;
    $rec =~ s/>$//;

    open(TMP, ">>$outdir/$name.$i.fasta") ||
        die "could not open file: $outdir/$name.$i.fasta\n";

    print TMP ">$rec";
    
    close(TMP);

    $j++;
    ($j > $n_per_file) && $i++ && (print "$i\n") && ($j = 1);
}

close(FASTA);
