package Plugins::depositfiles;
#
# depositfiles.pm module is a part of Web Share Downloader
# Copyright (C) 2006-2008 by Aleksey Luzin
#
#

use strict;
use warnings;
use lib '..';
use sql;
use WSD::Auth;
use WSD::Download qw/&direct_download &create_request/;
use Common;
use HTTP::Request::Common qw(POST);
use MIME::Base64;
use Data::Dumper;
use Exporter ();
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 =~ /depositfiles\.com/) {
	return 1;
    }
    return 0;
}
sub set_error {
	my $id = shift;
	my $error = shift;
	$links->setstatus($id, {status=>3, statustext=>$error, nexttry=>"5 minute"});
}
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 check_login {
	my $r = $browser->get('http://depositfiles.com/en/');
	my $req = POST 'http://depositfiles.com/en/login.php',
		Referer=>'http://depositfiles.com/en/',
		Content => [go=>1, login=>$config->{deposit_login}, password=>$config->{deposit_pass}];
	my $response = $browser->request($req);
	my $content = $response->content();
	return 1 if($content =~ m~http://depositfiles.com/gold/~);
	return 0;	
}
sub get_directlink {
	my $link = shift;
	my $content = '';
	my $req;
	my $response;
#	my $cur_ip = WSD::Download::current_ip;
	A: {
		$req = create_request($link->{link}, 'GET', 'http://wsd.p34.net/');
		$response = $browser->request($req);
		unless ($response->is_success) {
			$log->write(2, $response->status_line);
			set_error($link->{id}, 'Не могу получить прямую ссылку');
			return '';  
		}
		$content = $response->content;
		open FD, "> $config->{logdir}/depositfiles1.html";
		print FD $content;
		close FD;
		if($content =~ /Вы исчерпали лимит подключений!/) {
#			WSD::Download::change_ip;
#			my $c = WSD::Download::current_ip;
#			redo A if($c!=$cur_ip);
			return '';
		}
	}
	unless ($content =~ /.*form.*?action="(.*?)".*?name="gateway_result"/s) {
		
		$log->write(2, "Cannot find first form");
		set_error($link->{id}, 'Не могу получить прямую ссылку');
		return '';
	}
	my $action = $1;
	$log->write(2, "action: $action");
	$action = 'http://depositfiles.com'.$action unless($action =~ m|http://|);
	$req = POST $action,
		Referer=>$link,
		Content => [gateway_result=>1];
	$response = $browser->request($req);
	unless($response->is_success) {
		$log->write(2, "First POST error");
		$log->write(2, $response->status_line);
		set_error($link->{id}, 'Не могу получить прямую ссылку');
		return '';
	}
	$content = $response->content;
	open FD, "> $config->{logdir}/depositfiles2.html";
	print FD $content;
	close FD;
	
	$content =~ /download_url.*?action=\"([^\"]*?)\"/s;
	my $dlink = $1;
	$log->write(2, "dlink: $dlink");
	return $dlink;
}
sub download {
	shift;
	my $id = shift;
	my $link = $links->getlink($id);
	my $dlink = '';
	my $prem_used = 0;
	if($config->{deposit_login} && $config->{deposit_pass} && check_login) {
		my $req = create_request($link->{link}, 'GET', 'http://referer.com');
		my $response = $browser->request($req);
		my $content = $response->content();
		if($content =~ /id\=\"dwn_link\".*?href=\"([^\"]*?)\"/s) {
			$dlink = $1;
		}
		$prem_used = 1;
		
	} else {
		$links->setstatus($id, {status=>1});
#		$dlink = step2($link) if($link->{input});
		$dlink = get_directlink($link);
	}
	if ($dlink) {
		my $req = create_request($dlink);
		sleep(100) unless($prem_used);
		WSD::Download::direct_download($id, $req);
	} else {
		my $error = 'Не могу получить прямую ссылку';
		$links->setstatus($id, {status=>3, statustext=>$error, nexttry=>"5 minute"});
	}
}
1;
