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

use strict;
use warnings;
use lib '..';
use sql;
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.0" ;


sub check_link {
    shift;
    my $link = shift;
    if ($link =~ /swapfile\.ru/) {
	return 1;
    }
    return 0;
}
sub step1 {
	$log->write(2,"swapfile::Step1");
	my $link = shift;
	my $id = shift;
	my $req = create_request($link);
	my $response = $browser->request($req);
	unless ($response->is_success) {return '';  }
	my $content = $response->content();
	$req = POST 'http://new.swapfile.ru/API.php?action=testajax',
		Referer=>$link,
		Content => [];
	$response = $browser->request($req);
	$req = POST 'http://new.swapfile.ru/API.php?action=selectfree',
		Referer=>$link,
		Content => [];
	$response = $browser->request($req);
	$content =~ /window.fileTicket\s+=\s+['"]([^'"]*?)['"]/;
	my $ft = $1;
	$content =~ /window.fileTicketCode\s+=\s+['"]([^'"]*?)['"]/;
	my $ftc = $1;
	unless($ftc) {
		my $error = 'Не могу получить прямую ссылку';
		$links->setstatus($id, {status=>3, statustext=>$error, nexttry=>"1 minute"});
	};
	my $img_src = 'http://new.swapfile.ru/captcha.php?id='.$ftc;
	sleep(130);
	$req = create_request($img_src, 'GET', $link);
	$response = $browser->request($req);
	$content = $response->content;
	my $image = encode_base64($content);
	my $rnd = int(rand(1000000));

	my $tmp = 'rnd='.$rnd.'|ft='.$ft.'|ftc='.$ftc;
	$tmp.='|image='.$image;
	$links->setstatus($id, {status=>5, statustext=>'Waiting for input', tmp=>$tmp, input=>'', nexttry=>'3 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;
}
my $error = '';
sub step2 {
	my $link = shift;
	$log->write(2,"swapfile::Step2");
	my $h = strtohash($link->{tmp});
	my $req = POST "http://new.swapfile.ru/API.php?action=validate&id=$h->{ftc}&code=$link->{input}",
		Referer=>$link->{link};
	my $response = $browser->request($req);
	my $content = $response->content;
	if($content =~ /f/) {
		$error = 'Wrong code';
		$links->setstatus($link->{id}, {status=>3, statustext=>$error, nexttry=>"5 minute"});
		return '';
	}
	my $dlink = "$h->{ft}/$link->{input}";
	return $dlink;
   
}
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});
		$error = 'Не могу получить прямую ссылку';
		$dlink = step2($link) if($link->{input});
	} else {
		$links->setstatus($id, {status=>1});
		step1($link->{link}, $id);
		return '';
	}
	if ($dlink) {
		my $req = create_request($dlink, 'GET', $link->{link});
		WSD::Download::direct_download($id, $req);    
	} else {
		$links->setstatus($link->{id}, {status=>3, statustext=>$error, nexttry=>"5 minute"});
	}
}
1;