package Opals::XML::SAX::EbookDataHandler;

# Version number
$VERSION   = 0.01;

use warnings;
use strict;
use XML::SAX;
use base qw( XML::SAX::Base );
#################################################################
sub new {
    my ($class) = @_;
    my $type = shift;
    my $self={parsingSection=>'',metadata=>{},TOC=>[],spine=>[],bookCoverList=>[]};
    $self->{text}="";
    bless $self, $class;
    return $self;
}

#################################################################
sub start_element {
    my ($self, $element) = @_;
    my $name = $element->{'Name'};
    if($name eq 'metadata'){
        $self->{'parsingSection'}='metadata';
    }
    elsif($name eq 'TOC'){
        $self->{'parsingSection'}='TOC';
    }
    elsif($name eq 'spine'){
        $self->{'parsingSection'}='spine';
    }
    elsif($name eq 'bookCoverList'){
        $self->{'parsingSection'}='bookCoverList';
    }
    elsif($self->{'parsingSection'} eq 'TOC'){
        if($name eq 'item'){
            push @{$self->{'TOC'}},{};
        }
    }
    $self->{text}="";
} 
#################################################################
sub end_element {
    my ($self, $element) = @_;
    my $name = $element->{'Name'};

    if($self->{'parsingSection'} eq 'metadata'){
        $self->{'metadata'}->{$name}=$self->{text};
    }
    elsif($self->{'parsingSection'} eq 'TOC' && $name ne 'item'){
        my $e = getLastElement($self->{'TOC'});
        $e->{$name}=$self->{text};
    }
    elsif($self->{'parsingSection'} eq 'spine'){
         $self->{text} =~ s/\n//g;
         $self->{text} =~ s/^\s+|\s+$//g;
         push @{$self->{'spine'}},$self->{text} if($self->{text} ne '');
    }
    elsif($self->{'parsingSection'} eq 'bookCoverList'){
         $self->{text} =~ s/\n//g;
         $self->{text} =~ s/^\s+|\s+$//g;
         push @{$self->{'bookCoverList'}},$self->{text} if($self->{text} ne '');
    }

   
    $self->{text}="";
  
}
#################################################################
sub characters {
    my $self = shift;
    my $text = shift;
    $self->{text} .= $text->{Data};
}
#################################################################
sub getLastElement{
    my ($arr)=@_;
    my $i=scalar(@$arr) -1;
    my $e=$i>=0?@$arr[$i]:undef;
    return $e;
}


1;
