package BLAST::Program;
use Carp;
use warnings;
use strict;

###################################################
# Global varialbes
my $validProgramNames = ['blastp', 'blastn', 'blastx', 'tblastn', 'tblastx'];


###################################################
sub new {
    my $pkg = shift;
    bless {
	name => undef
    }, $pkg;
}


###################################################
sub setName {
    my $self = shift;
    my $name = shift or croak "Program name is not defined.";
    if( isValidProgramName($name) ){
	$self->{name} = $name;
    } else {
	croak "Invalid BLAST program name:$name.";
    }
}


###################################################
sub isValidProgramName {
    my $program   = shift;
    my $validFlag = 0;
    foreach my $validName (@$validProgramNames){
	if( $program eq $validName ){
	    $validFlag = 1; last;
	}
    }
    return $validFlag;
}


###################################################
sub getName {
    my $self = shift;
    return $self->{name};
}


###################################################
sub getDBType {
    my $self = shift;
    if( $self->getName() eq 'blastn' ){
	return 'dna';
    } elsif( $self->getName() eq 'tblastx' ){
	return 'dna';
    } elsif( $self->getName() eq 'tblastn' ){
	return 'dna';
    } elsif( $self->getName() eq 'blastp' ){
	return 'pep';
    } elsif( $self->getName() eq 'blastx' ){
	return 'pep';
    }
}

1;
