######################################################################
package Net::Amazon::Attribute::Review;
######################################################################
use warnings;
use strict;
use Log::Log4perl qw(:easy);
use base qw(Net::Amazon);

__PACKAGE__->make_accessor($_) for qw(date asin rating summary content 
                                      total_votes helpful_votes customer_id);

__PACKAGE__->make_compatible_accessor('comment', 'content');

use constant ELEMENT_TO_METHOD_MAP => {
    # XXX: should ASIN be Asin, ASIN, or asin?
    'ASIN'         => 'asin',
    'Content'      => 'content',
    'CustomerId'   => 'customer_id',
    'Date'         => 'date',
    'HelpfulVotes' => 'helpful_votes',
    'Rating'       => 'rating',
    'Summary'      => 'summary',
    'TotalVotes'   => 'total_votes',
};

##################################################
sub new {
##################################################
    my($class, %options) = @_;

    my $self = {
        rating  => "",
        summary => "",
        content => "",
        helpful_votes => "",
        customer_id => "",
        asin => "",
        date => "",
        total_votes => "",
        %options,
    };

    if(defined $self->{comment}) {
        $self->{content} = $self->{comment};
    }

    bless $self, $class;
}

##################################################
sub init_via_xmlref {
##################################################
    my($self, $xmlref) = @_;

    my $href = (ELEMENT_TO_METHOD_MAP);

    for(keys %$href) {
        my $method = lc($href->{$_});
        if(defined $xmlref->{$_}) {
            $self->$method($xmlref->{$_});
        } 
    }
}

1;

__END__

=head1 NAME

Net::Amazon::Attribute::Review - Customer Review Class

=head1 SYNOPSIS

    use Net::Amazon::Attribute::Review;
    my $rev = Net::Amazon::Attribute::Review->new(
                 'rating'        => $rating,
                 'summary'       => $summary,
                 'content'       => $content,
                 'asin'          => $asin,
                 'customer_id'   => $customer_id,
                 'date'          => $date,
                 'helpful_votes' => $helpful_votes,
                 'total_votes'   => $total_votes,
    );

=head1 DESCRIPTION

C<Net::Amazon::Attribute::Review> holds customer reviews.

=head2 METHODS

=over 4

=item rating()

Accessor for the numeric value of the rating.

=item summary()

Accessor for the string value of the summary.

=item comment()

Accessor for the string value of the customer comment.  This accessor is deprecated in
favor of content().

=item content()

Accessor for the string value of the content.

=item asin()

Accessor for the string value of ASIN.

=item customer_id()

Accessor for the string value of the customer ID.

=item helpful_votes()

Accessor for the numeric value of the helpful votes.

=item total_votes()

Accessor for the numeric value of the total votes.

=back

=head1 SEE ALSO

=head1 AUTHOR

Mike Schilli, E<lt>m@perlmeister.comE<gt>

=head1 COPYRIGHT AND LICENSE

Copyright 2003 by Mike Schilli E<lt>m@perlmeister.comE<gt>

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself. 

=cut

__END__
<Review>
  <ASIN>0201360683</ASIN>
  <Rating>4</Rating>
  <HelpfulVotes>2</HelpfulVotes>
  <CustomerId>YYYYYYYXXYYYY</CustomerId>
  <Reviewer>
    <CustomerId>YYYYYYYXXYYYY</CustomerId>
    <Name>John Doe</Name>
    <Nickname>JD</Nickname>
    <Location>New York, NY USA</Location>
  </Reviewer>
  <TotalVotes>2</TotalVotes>
  <Date>2000-03-09</Date>
  <Summary>Wicked Pisser!</Summary>
  <Content>I found this book to be very good</Content>
</Review>