package RSWS;
use strict;

use XML::Simple;
use LWP::UserAgent;
use URI::Escape;

sub new {
    my $class = shift;
    my $self  = {
        uagent      => LWP::UserAgent->new( agent => 'RS-Request' ),
        requestType => 'get',
        error_count => 0,                         # errors within the response
    };

    bless $self, $class;

    $self->_init(@_);

    return $self;
}

sub fetch {
    my $self = shift;

    my $response;
    my $reqArgs = $self->_requestArgs();
    my $reqURL  = $self->_requestURL();

    if ( $self->{requestType} eq 'get' ) {
        my $args = '';

        if ($reqArgs) {
            while ( my ( $k, $v ) = each %$reqArgs ) {
                $args .= join( '=', $k, uri_escape($v) ) . '&';
            }
            $args =~ s/&$//;

            $reqURL .= '?' . $args;
        }

        $response = $self->{uagent}->get($reqURL);
    } else    # post
    {
        $response = $self->{uagent}->post( $reqURL, $reqArgs );
    }

    #print STDERR "url: $reqURL\n";
    unless ( $response->is_success ) {
        $self->error( $response->status_line );
        return undef;
    }

    return $self->_responseHandler( $response->content );
}

sub response_error_count {
    my $self = shift;

    if ( $_[0] ) {
        $self->{error_count} = shift;
    }

    return $self->{error_count};
}

sub error {
    my $self = shift;

    if ( $_[0] ) {
        $self->{error} = shift;
    }

    return $self->{error};
}

sub _requestType {
    my $self = shift;
    my $type = lc shift;
    return unless $type;

    $self->{requestType} = $type =~ m/p/ ? 'post' : 'get';
}

sub _init {
}

1;
