package FASTA::Sequence;

use Carp;
use warnings;
use strict;


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


###################################################
sub setTitle {
    my $self  = shift;
    my $title = shift or croak "Title is not defined.";
    $self->{title} = $title;
}


###################################################
sub setSequence {
    my $self = shift;
    my $seq  = shift or croak "Sequence is not defined.";
    $self->{sequence} = $seq;
}


###################################################
sub appendSequence {
    my $self = shift;
    my $seq  = shift or croak "Sequence to be appended is not defined.";
    $self->{sequence} .= $seq;
}


###################################################
sub getTitle {
    my $self = shift;
    return $self->{title};
}

###################################################
sub getShortTitle {
    my $self = shift;
    my $title = $self->getTitle();
    $title =~ s/\s.+//;
    return $title;
}

###################################################
sub getSequence {
    my $self = shift;
    return $self->{sequence};
}

###################################################
sub getRCSequence {
    my $self = shift;
    return reverseComplement( $self->getSequence() );
}

###################################################
sub getLength {
    my $self = shift;
    return length($self->{sequence});
}


###################################################
sub isDefined {
    my $self = shift;
    return (defiend($self->getTitle()) and deifned($self->getSequence()));
}

###################################################
sub reverseComplement {
    my $seq = shift;
    $seq =~ s/a/1/g;
    $seq =~ s/c/2/g;
    $seq =~ s/g/3/g;
    $seq =~ s/t/4/g;
    $seq =~ s/A/5/g;
    $seq =~ s/C/6/g;
    $seq =~ s/G/7/g;
    $seq =~ s/T/8/g;
    $seq =~ s/1/t/g;
    $seq =~ s/2/g/g;
    $seq =~ s/3/c/g;
    $seq =~ s/4/a/g;
    $seq =~ s/5/T/g;
    $seq =~ s/6/G/g;
    $seq =~ s/7/C/g;
    $seq =~ s/8/A/g;
    return reverse($seq);
}

1;
