#!/usr/local/bin/perl

#Todo:
# 4) Spruce up results page
#
# 5) Speed things up by spawning processes
#
# 6) Add log number, to make references easier

use CGI;
use LWP::UserAgent;
use URI::Escape;

#Settings
$cgi = new CGI;
$surl = "http://babelfish.altavista.digital.com/cgi-bin/translate?";
%re_table = ("en_fr" => 'En Français:</b>\n.*?\n.*?\n.*?\n\n([^<]*)',
	     "en_de" => 'Auf Deutsch:</b>\n.*?\n.*?\n.*?\n\n([^<]*)',
	     "en_it" => 'In Italiano:</b>\n.*?\n.*?\n.*?\n\n([^<]*)',
	     "en_pt" => 'Em Português:</b>\n.*?\n.*?\n.*?\n\n([^<]*)',
	     "en_es" => 'En Español:</b>\n.*?\n.*?\n.*?\n\n([^<]*)',
	     "fr_en" => 'In English:</b>\n.*?\n.*?\n.*?\n\n([^<]*)',
	     "de_en" => 'In English:</b>\n.*?\n.*?\n.*?\n\n([^<]*)',
	     "it_en" => 'In English:</b>\n.*?\n.*?\n.*?\n\n([^<]*)',
	     "es_en" => 'In English:</b>\n.*?\n.*?\n.*?\n\n([^<]*)',
	     "pt_en" => 'In English:</b>\n.*?\n.*?\n.*?\n\n([^<]*)',
	     );

%lang_text = ("en_fr" => 'English To French To English',
	      "en_de" => 'English To German To English',
	      "en_it" => 'English To Italian To English',
	      "en_pt" => 'English To Portugouse To English',
	      "en_es" => 'English To Spanish To English',
	      "en" => 'Given Text'
	     );


$given_phrase = $cgi->param("phrase");
unless ($given_phrase) {
    print "Location: http://www.cs.uchicago.edu/~wdr1/Tushar/","\n\n";
}
&log_entry($given_phrase);
%finished_translations = &do_translations($given_phrase);
$finished_translations{"en"} = $given_phrase;
&output_html_header($given_phrase);
foreach $lang (sort keys %finished_translations){
    &output_html_item($lang);
}
&output_html_footer;


sub output_html_item{
    my $lang = shift;
    my ($section,$translation);
    
    $section = $lang_text{$lang};
    $translation = $finished_translations{$lang};
    print <<"End";
<!--- Language: $lang --->
<B><FONT SIZE=+1>$section</FONT></B><BR>
<UL>
$translation
</UL><BR>
<HR>
End
}


sub output_html_header{
    print <<"End";
Content-type: text/html


<HTML>
<HEAD>
<TITLE>Tushar Translations</TITLE>
</HEAD>
<BODY BGCOLOR=#FFFFFF>
<H1>Babbling Babelfish</H1>
<HR>
End
}

sub output_html_footer {
    print <<"End";
<FORM ACTION="http://www.cs.uchicago.edu/cgi-bin/wdr2/tushar.cgi" METHOD="POST">
Enter the phrase you'd like to have translated:<BR>
<TEXTAREA ROWS=6 name="phrase" COLS=60>
$given_phrase
</TEXTAREA><P>
<INPUT Type="submit" VALUE="Translate">
</FORM>

</BODY>
</HTML>
End
}
#'

sub do_translations {
    my $text = shift;
    my ($lang, $tmp,%translations,$reverse_lang);
    foreach $lang (keys %re_table){
	if ($lang =~ /^en_/) {
	    $lang =~ /^(\w+)_(\w+)$/;
	    $reverse_lang = join("",$2,"_",$1);
	    $tmp = &translate($lang,$text);
	    $translations{$lang} = &translate($reverse_lang,$tmp);
	}
    }
    return %translations;
}
	    
sub translate {
    my ($language,$phrase) = @_;
    my ($qstring, $req,$ua,$rstring,$res,$re);

    $re = $re_table{$language};
    $phrase = &uri_escape($phrase);
    $ua = new LWP::UserAgent;
    $req = new HTTP::Request 'POST',$surl;
    $req->content_type('application/x-www-form-urlencoded');
    $qstring = "doit=done&urltext=$phrase&languagepair=$language";
    $req->content($qstring);
    $res = $ua->request($req);
    $rstring =  $res->content;
    $rstring =~ /$re/; 
    $translated_string = $1;
    
    return $translated_string;
}

sub log_entry {
    my $text = shift;
    my ($host, $time,$log_file,$line);

    $log_file = "tushar.txt";
    $host = $ENV{"REMOTE_HOST"};
    $time = localtime(time);
    $line = "[$host] [$time]";
    open(F,">>".$log_file) || return 0;
    print F $line,"\n";
    print F $text,"\n";
    print F "--------------------\n";
    close(F);
    
    return 1;
}






