#!/usr/local/bin/perl

use WWW::Mechanize;

use constant USERNAME => 'rs+amazon@crystalflame.net';
use constant PASSWORD => 'lemmein';

use constant FETCH => 0;
use constant DATA_AMAZON => '/etc/mail/filster/data/amazon';
use constant USERS_AMAZON => '/etc/mail/filster/users/amazon';
use constant PARSE => 0;

my $args = join ' ', @ARGV;
my $agent = WWW::Mechanize->new( );

my $content; if (! -r &DATA_AMAZON || &FETCH || $args =~ /fetch/) {
    $agent->get('http://www.amazon.com/');
    $agent->follow_link( url_regex => qr{your/store-home} );
    my $timeout; while ($agent->content =~ /flex-sign-in/) {
	if (++$timeout > 1) { $timeout = -1; last }
	$agent->follow_link( url_regex => qr{flex-sign-in} );
	$agent->submit_form(
	    form_number => 1,
	    fields => { email => &USERNAME, password => &PASSWORD },
	);
    }; die "Login failed" if $agent->content =~ /flex-sign-in/;

    $agent->follow_link( url_regex => qr{your/store-home} ) or die "Home not found";

    $content = $agent->content;

    use Storable qw(lock_nstore); lock_nstore [ $content ], &DATA_AMAZON;
} else {
    use Storable qw(lock_retrieve); $content = @{ lock_retrieve &DATA_AMAZON }[0];
}

print $content; die;

my %users; if (! -r &USERS_AMAZON || &PARSE || &FETCH || $args =~ /parse/) {
    my @content;
    $content =~ s{</td><td>}{|}g;
    @content = split /\n+/, $content;
    @content = grep { /Profile\.aspx\?uid=\d+"/ } @content;
    my %users; for my $user (@content) {
	chomp $user;
	my @user = split /\|/, $user;
	my $uid = ($user =~ /Profile\.aspx\?uid=(\d+)/)[0];
	my $email = (grep /\@[^\s]+\.[a-z]{2,4}$/, @user)[-1];
	if (length $uid && length $email) {
	    $users{$uid} = $email;
	} else {
	    warn "Data failure ($uid, $email)";
	}
    }
    use Storable qw(lock_nstore); lock_nstore \%users, &USERS_AMAZON;
} else {
    use Storable qw(lock_retrieve); %users = %{ lock_retrieve &USERS_AMAZON };
}

print join "\n", values %users;

