#!/usr/bin/perl -w

#program designed to log in and retrieve sequences from BRCO

#REQUIRES libwww-perl-5.53 (version probably doesn't matter)
#doesn't use ssl

  use LWP::UserAgent;

  use vars qw(
	$dest_dir
        $username
        $password
        $lastname
        $loginURL
        $loginDOC
        $altLink
        $browser
        $sessid
        $req
        $res
        $req2
        $res2
        $parse1
        $parse2
        $zipURL
        $ordnum
);


@ARGV or print "No input parameters, proceeding with default.\n";

my @arg_pairs = split (/\-/, (join ' ', @ARGV));
my %args=();
my @ord_numbers=();
foreach (@arg_pairs){
    $_ or next;
    my ($flag, @val)=split /\s+/;
    if($flag eq 'o'){
	@ord_numbers= @val;
    }
    else{
	$args{$flag}=$val[0];
    }
}

$username=$args{'u'};
$password=$args{'p'};
$dest_dir=$args{'d'};

@ord_numbers or die "No order number specified, please indicate at least one with the -o flag\n";
$username ||= 'cl295@cornell.edu';
$password ||= 'coffee';
$dest_dir ||= '/data/shared/pgn_data_processing/incoming_files/cgn/new_files/';
$lastname='lin'; #need to know this to construct url for ZIP file name
$loginURL='http://www.brc.cornell.edu/user/login.php';

$ua = LWP::UserAgent->new;

my $req = HTTP::Request->new(POST => "$loginURL");
$req->content_type('application/x-www-form-urlencoded');
$req->content("email=$username&password=$password&check=1");

my $res = $ua->request($req)->as_string;

@parse1= split (/PHPSESSID=/,$res);

@parse2= split (/\n/,$parse1[1]);
$sessid = $parse2[0];
print "Obtained session id: $sessid\n";

print "Retrieving " . @ord_numbers . " files\n";

my $file_counter=1;
foreach $ordnum (@ord_numbers){
    $zipURL="http://www.brc.cornell.edu/user/res_zipdl.php3/"."$lastname"."_"."$ordnum.zip?sample="."$ordnum"."&PHPSESSID="."$sessid";

    print "Retrieving order $ordnum ($file_counter of " . @ord_numbers . ")\n";
    my $req2 = HTTP::Request->new(GET => $zipURL);
    my $filename="$lastname"."_"."$ordnum".".zip";
    
    $res2 = $ua->request($req2, $filename);

    if ($res2->is_success) {
        print "ok\n";
    } else {
        print $res->status_line, "\n";
    }

    my $syscmd = "mv $filename $dest_dir";
    print "Moving $filename to $dest_dir\n";
    system($syscmd);
    print "File moved.\n";

    $file_counter++;
}

