package Plugins::megaupload;
#
# megaupload.pm module is a part of Web Share Downloader
# Copyright (C) 2006,2008 by Aleksey Luzin
#
#
use lib '..';
use WSD::Download qw/&direct_download &create_request/;
use Common;
use strict;
use warnings;
use Exporter ();
use HTTP::Request::Common qw(POST);
use MIME::Base64;
use sql;

use vars qw($VERSION);

our (@ISA, @EXPORT);
@ISA = qw(Exporter);
@EXPORT = qw(&check_link &download);
$VERSION = "1.6" ;

sub check_link {
	shift;
	my $link = shift;
	if ($link =~ /megaupload\.com/) {
		return 1;
	}
	return 0;
}
sub step1 {
	$log->write(2,"MegaUpload::Step1");
	my $link = shift;
	my $id = shift;
	$log->write(4,"$link");
	my $req = create_request($link, 'GET', '', 'l=en; v=1; toolbar=1; megauploadtoolbar_visible=yes; MUTBI=E%3D3%2CP%3D3');
	my $response = $browser->request($req);
	unless ($response->is_success) {$log->write(3,"error1");return ''; }
	my $content = $response->content;
	unless ($content =~ /img src\=\"(\/capgen\.php.*?)\"/ ) {
		my $error = 'Не могу получить картинку';
		$log->write(3,"$error");
		$links->setstatus($id, {status=>3, statustext=>$error, nexttry=>'5 minute'});
		return '';
	}
	my $img = 'http://www.megaupload.com'.$1;
	$content =~ /"imagecode" value="(.*?)"/;
	my $imgcode = $1;
	$content =~ /"megavar" value="(.*?)"/;
	my $mvar = $1;
	$log->write(4,"img:$img");
	$response = $browser->get($img);
	$content = $response->content;
	my $image = encode_base64($content);
	my $rnd = int(rand(1000000));
	my $tmp = 'rnd='.$rnd.'|imgcode='.$imgcode.'|mvar='.$mvar.'|image='.$image;
	$links->setstatus($id, {status=>5, statustext=>'Waiting for input', tmp=>$tmp, input=>'', nexttry=>'5 minute', hostname=>$config->{host} });
	return '';   

}
sub strtohash {
my $str = shift;
my %hash;
my @a = split(/\|/, $str);
	foreach my $a (@a) {
		my @a1 = split('=', $a);
		$hash{$a1[0]} = $a1[1];
	}
	return \%hash;
}

sub step2 {
	$log->write(2,"MegaUpload::Step2");
	my $link = shift;
	my $d = '';
	$link->{link}=~ /d=(.*)/;
	$d = $1;
	my $tmp = strtohash($link->{tmp});
	my $content = [d=>$d, imagecode=>$tmp->{imgcode}, megavar=>$tmp->{mvar}, imagestring=>$link->{input}];
	my $req = POST 'http://www.megaupload.com/',
		Referer => $link->{link},
		Content => $content;
	my $response = $browser->request($req);
	if (($response->is_error)&&($response->code != 302)) {
		$log->write(3,"error1: ".$response->status_line);
		return ''; 
	}
	$content = $response->content;
	if($content =~ /download_html.*?\';(.*?)\" /s) {
		my $str = $1;
		$log->write(2, $str);
		$str =~ s/String\.fromCharCode\(Math\.(.*?)\)/chr\($1\)/g;
		$str =~ s/document.*?innerHTML/\$inner/s;
		$str =~ s/var /my \$/g;
		$str =~ s/\s\+\s(\S+)\s\+\s(\S+)\s\+\s/\.\$$1\.\$$2\./gs;
		$str =~ s/\s\+\s/\./gs;
		$str.="';";
		my $inner;
		eval($str);
		$inner =~ s/^.*?\"//;
		return $inner;
	}
	return '';
}
sub download {
	shift;
	my $id = shift;
	my $link = $links->getlink($id);
	my $dlink = '';
	if(($link->{status} == '5')&&($link->{nexttry} > $link->{now})) {
		$links->setstatus($id, {status=>1});
		$dlink = step2($link) if($link->{input});
	} else {
		$links->setstatus($id, {status=>1});
		my $query = 'select link from links where id = ?';
		my $url = query($query, $id)->[0]->[0];
		step1($url, $id);
		return '';
	}

	if ($dlink) {
		$log->write(4,"sleep..");
		sleep(50);
		$log->write(4,"start...");
		my $req = create_request($dlink);
		WSD::Download::direct_download($id, $req);    
		$log->write(4,"end...");
	} else {
		my $error = 'Не могу получить прямую ссылку';
		$log->write(3,"$error");
		$links->setstatus($id, {status=>3, statustext=>$error, nexttry=>'5 minute'});
	}
}

1;