package AMAZON_REST;

use LWP::UserAgent;
use XML::Simple;
use Unicode::RecursiveDowngrade;
use strict;
use warnings;

sub new {
  my($class, %param) = @_;
  my $self = bless {
    AWSAccessKeyId    => $param{AWSAccessKeyId} || '',
    SubscriptionID    => $param{SubscriptionID} || '',
    AssociateTag      => $param{AssociateTag}   || '',
    UserAgent         => $param{UserAgent}      || 'ECS-Agent/0.1',
    BaseURL           => 'http://webservices.amazon.co.jp/onca/xml',
    Version           => '2005-10-05',
    Proxy             => $param{Proxy},
  }, $class;
  $self;
}

sub request {
  my ($self, $operation, $param ) = @_;
  my $id;
  if( $self->{AWSAccessKeyId} ){
     $id='AWSAccessKeyId='.$self->{AWSAccessKeyId};
  }elsif( $self->{SubscriptionID} ){
     $id='SubscriptionId='.$self->{SubscriptionID};
  }else{ return; }
  my $request_url = $self->{BaseURL}.'?'
                  . 'Service=AWSECommerceService'
                  . '&'.$id
                  . '&Operation='     . $operation;
  if( $self->{AssociateTag} ){
    $request_url .= '&AssociateTag='  . $self->{AssociateTag};
  }
  foreach my $key ( keys %{$param} ) {
    $request_url .= '&'.$key.'='.$param->{$key};
  }
  $request_url .= ( '&Version='. $self->{Version} );
  
  print $request_url."\n";
  my $ua = LWP::UserAgent->new;
  $ua->timeout(10);
  $ua->agent($self->{UserAgent});
  if( $self->{Proxy} ){
    $ua->proxy('http',  $self->{Proxy} );
  }
  my $response = $ua->get($request_url);
  if ($response->is_success) {
      my $rd = Unicode::RecursiveDowngrade->new;
      my $xml = $rd->downgrade(XMLin($response->content, ForceArray => 1));
      return $xml;
  }
  return;
}

1;