######################################################################
package Net::Amazon::Property::DVD;
######################################################################
use warnings;
use strict;
use base qw(Net::Amazon::Property);

__PACKAGE__->make_accessor($_) for qw(studio media nummedia upc mpaa_rating
region_code label running_time publisher ean theatrical_release_date);
__PACKAGE__->make_array_accessor($_) for qw(actors directors features starring);

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

    my $self = $class->SUPER::new(%options);
    bless $self, $class; # Bless into this class

    if(exists $options{xmlref}) {
        $self->init_via_xmlref($options{xmlref});
    }

    return $self;
}

##################################################
sub actor {
##################################################
    my($self, $nameref) = @_;

    # Only return the first director
    return ($self->actors($nameref))[0];
}


##################################################
sub director {
##################################################
    my($self, $nameref) = @_;

    # Only return the first director
    return ($self->directors($nameref))[0];
}

##################################################
sub feature {
##################################################
    my($self, $nameref) = @_;

    # Only return the first feature
    return ($self->features($nameref))[0];
}


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

    $self->SUPER::init_via_xmlref($xmlref);

    my $ref = $xmlref->{ItemAttributes};

    $self->actors($ref->{Actor});
    $self->starring($ref->{Actor});
    $self->directors($ref->{Director});
    $self->ean($ref->{EAN});
    $self->features($ref->{Format});
    $self->label($ref->{Label});
    $self->mpaa_rating($ref->{AudienceRating});
    $self->publisher($ref->{Publisher});
    $self->region_code($ref->{RegionCode});
    $self->running_time($ref->{RunningTime}->{content});
    $self->studio($ref->{Studio});
    $self->upc($ref->{UPC});
    $self->theatrical_release_date($ref->{TheatricalReleaseDate});


    $self->media($ref->{Binding});

    $self->NumMedia($ref->{NumberOfItems});
    $self->nummedia($ref->{NumberOfItems});

    if ( defined $ref->{TheatricalReleaseDate} ) {
        my $year =  (split(/\-/, $ref->{TheatricalReleaseDate}))[0];
        $self->year($year);
    }
}

1;

__END__

=head1 NAME

Net::Amazon::Property::DVD - Class for DVDs on amazon.com

=head1 SYNOPSIS

  use Net::Amazon;

  # ...

  if($resp->is_success()) {
      for my $prop ($resp->properties) {
          print $_->title(), " ",
                $_->studio(), " ",
                $_->year(), "\n";
  }

=head1 DESCRIPTION

C<Net::Amazon::Property::DVD> is derived from 
C<Net::Amazon::Property> and on top of the all-purpose
methods the base class provides, it offers specialized accessors for
DVD parameters.

=head2 METHODS

=over 4

=item title()

Returns the title of the DVD.

=item studio()

Returns the studio.

=item directors()

Returns a list of directors. Note that there's also a director() method
only returning the first director.

=item starring()

Returns the same list as the method actors().

=item upc()

Returns the DVD's UPC as a string.

=item media()

Returns the DVD's media type as a string.

=item nummedia()

Returns the DVD's number of media (number of discs) as a string.

=item theatrical_release_date()

Returns the DVD's theatrical release date.

=item mpaa_rating()

Returns the DVD's MPAA rating.

=item features()

Returns the DVD's features as a list of strings. Examples: 
"Color", "Closed-captioned", "Widescreen".

=item ReleaseDate()

Returns the release date.

For historical reasons, this method used to return the theatrical release date. 
However, as of version Net::Amazon 0.48 the release date is returned, and 
a separate L</theatrical_release_date()> method is available. 

=item new(xmlref => $xmlref)

Initializes an object by passing a hash of hashes structure containing
the XML data returned from the service. Usually, this is just used by
C<Net::Amazon> internally to initialize objects for on backcoming
data.

=back

Check out L<Net::Amazon::Property> for all-purpose accessors, like
C<year>, C<OurPrice>, C<ListPrice>, etc.

=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
