The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package PagSeguro::Status;

use Moose;
use WWW::Mechanize;
use DateTime;

has 'mechanize' => (
    isa     => 'Object',
    is      => 'ro',
    default => sub { WWW::Mechanize->new( agent_alias => 'Windows IE 6' ) }
);

=head1 NAME

PagSeguro::Status - To know informations about PagSeguro payments!

=head1 VERSION

Version 0.01

=cut

our $VERSION = '0.02';

=head1 SYNOPSIS

    use PagSeguro::Status;
    my $a = PagSeguro::Status->new(
        paglogin => 'youruser@...',
        pagpass  => 'youpass...'
		from_date => dd/mm/yyyy
		to_date => dd/mm/yyyy
    );
    print $a->fetch_xml #returns a XML;

If you do not give the argument "from_date" and "to_date" the default is 1 month.

=cut

has 'paglogin' => ( is => 'rw', required => 1, isa => 'Str' );
has 'pagpass'  => ( is => 'rw', required => 1, isa => 'Str' );
has 'from_date' => (
    is      => 'rw',
    isa     => 'Str',
    default => sub { DateTime->now->subtract( months => 1 )->dmy('/') }
);
has 'to_date' => (
    is      => 'rw',
    isa     => 'Str',
    default => sub { DateTime->now->dmy('/') }
);

=head2 login

Do the login

=cut

sub login {
    my $self = shift;
    $self->mechanize->get('https://pagseguro.uol.com.br/');
    $self->mechanize->submit_form(
        form_number => 1,
        fields      => {
            userName => $self->paglogin,
            password => $self->pagpass,
        }
    );
}

=head2 get_days

Get the information between from_date and to_date.

=cut

sub get_days {
    my $self = shift;
    $self->mechanize->get(
        'https://pagseguro.uol.com.br/transaction/search.jhtml');
    $self->mechanize->submit_form(
        form_number => 1,
        fields      => {
            dateFrom => $self->from_date,
            dateTo   => $self->to_date
        }
    );
    return 1;
}

=head2 xml_generate

To generate the XML

=cut

sub xml_generate {
    my $self = shift;
    $self->mechanize->get(
        'https://pagseguro.uol.com.br/transaction/createFile.jhtml?fileType=xml'
    );
    if ( $self->mechanize->content =~ /ok\|(.+?)\n/ ) {
        my $xml_name = $1;
        return $xml_name;
    }
    else {
        die "could not take the xml name";
    }
}

before 'fetch_xml' => sub { my $self = shift; $self->login; $self->get_days };

=head2 fetch_xml

Fetch the xml, returns a XML :D

=cut

sub fetch_xml {
    my $self     = shift;
    my $xml_name = $self->xml_generate;

    # PagSeguro is really sux, maybe have to wait some seconds
    # to generate de XML
    sleep 5;

    $self->mechanize->get(
        'https://pagseguro.uol.com.br/transaction/sendFile.jhtml?fileName='
          . $xml_name );
    return $self->mechanize->content;
}

=head1 AUTHOR

Daniel de Oliveira Mantovani, C<< <daniel.oliveira.mantovani at gmail.com> >>

=head1 BUGS

Please report any bugs or feature requests to C<bug-pagseguro-status at rt.cpan.org>, or through
the web interface at L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=PagSeguro-Status>.  I will be notified, and then you'll
automatically be notified of progress on your bug as I make changes.




=head1 SUPPORT

You can find documentation for this module with the perldoc command.

    perldoc PagSeguro::Status


You can also look for information at:

=over 4

=item * RT: CPAN's request tracker (report bugs here)

L<http://rt.cpan.org/NoAuth/Bugs.html?Dist=PagSeguro-Status>

=item * AnnoCPAN: Annotated CPAN documentation

L<http://annocpan.org/dist/PagSeguro-Status>

=item * CPAN Ratings

L<http://cpanratings.perl.org/d/PagSeguro-Status>

=item * Search CPAN

L<http://search.cpan.org/dist/PagSeguro-Status/>

=back


=head1 ACKNOWLEDGEMENTS


=head1 LICENSE AND COPYRIGHT

Copyright 2011 Daniel de Oliveira Mantovani.

This program is free software; you can redistribute it and/or modify it
under the terms of either: the GNU General Public License as published
by the Free Software Foundation; or the Artistic License.

See http://dev.perl.org/licenses/ for more information.


=cut

666;    # PagSeguro is the devil!