#!/usr/bin/perl -w

# Cliente
use CGI qw/:standard/;
use Data::Dumper;
use SOAP::Lite;

my $css = <<"EOCSS";
  form { border: solid 1px #000000;
         padding: 2px;
         background-color: #aaffaa;
       }
  h3 { padding: 2px; margin: 2px;}
  input { border: solid 1px #000000; }
EOCSS

unless (param("action")) {
  print header;
  print start_html( -title => "MT Distribuída",
		    -style => { -code => $css }), h2("MT Distribuída");

  print start_form, h3("Configuração"),
    blockquote(small("Verificar se o servidor conhece este par de línguas")),
      table(Tr(td(b("Língua A:")), td(textfield("l1"))),
	    Tr(td(b("Língua B:")), td(textfield("l2")))),
	      hidden("action","configure"), submit(" OK "),end_form;

  print start_form, h3("Tradução"),
    blockquote(small("Procurar unidade de tradução mais próxima")),
      table(Tr(td(b("Língua A:")), td(textfield("l1"))),
	    Tr(td(b("Língua B:")), td(textfield("l2"))),
	    Tr(td(b("Frase:")), td(textfield("string", "", 100)))),
	      hidden("action","translate"), submit(" OK "),end_form;

  print start_form, h3("Concordância"),
    blockquote(small("Procurar conjunto de unidades de tradução onde o termo exista")),
      table(Tr(td(b("Língua A:")), td(textfield("l1"))),
	    Tr(td(b("Língua B:")), td(textfield("l2"))),
	    Tr(td(b("Termo:")), td(textfield("string", "", 30)))),
	      hidden("action","concordance"), submit(" OK "),end_form;


  print end_html;
} else {
  if (param("action") eq "concordance") {
    print header;
    print start_html("MT Distribuída: Concordância"), h2("MT Distribuída: Concordância");
    my $soapserver = SOAP::Lite
      -> uri('http://localhost:80/disttmx')
	-> proxy('http://localhost:80/cgi-bin/disttmx.cgi');

    my $soapresult = $soapserver->concordance(param("l1"),param("l2"),param("string"));

    unless($soapresult->fault) {
      my $result = $soapresult->result();
      if ($result) {
	my $w = param("string");
	print "<table>\n";
	print Tr(th(param("l1")), th(param("l2")));
	print map {
	  $_->[0] =~ s!$w!<b>$w</b>!g;
	  Tr(td({style=>'background-color: #aaffaa; padding: 2px; border: solid 1px #000'},$_->[0]),
	     td({style=>'background-color: #aaffaa; padding: 2px; border: solid 1px #000'},$_->[1])) } @{$result};
	print "</table>\n";
      } else {
	print "** Error: server does not find any occurence **\n";
      }
    } else {
      print "Error: ",$soapresult->faultcode,": ",$soapresult->faultstring;
    }
    print end_html;



  } elsif (param("action") eq "translate") {
    print header;
    print start_html("MT Distribuída: Tradução"), h2("MT Distribuída: Tradução");
    my $soapserver = SOAP::Lite
      -> uri('http://localhost:80/disttmx')
	-> proxy('http://localhost:80/cgi-bin/disttmx.cgi');

    my $soapresult = $soapserver->traduz(param("l1"),param("l2"),param("string"));

    unless($soapresult->fault) {
      my $result = $soapresult->result();
      if ($result) {
	print b("Tradução Sugerida:"),
	  div({style=>"border: solid 1px #000; padding: 2px; background-color: #aaffaa"},
	      $result);
      } else {
	print "** Error: server does not find any occurence **\n";
      }
    } else {
      print "Error: ",$soapresult->faultcode,": ",$soapresult->faultstring;
    }
    print end_html;


  } elsif (param("action") eq "configure") {
    print header;
    print start_html("MT Distribuída: Configuração"), h2("MT Distribuída: Configuração");
    my $soapserver = SOAP::Lite
      -> uri('http://localhost:80/disttmx')
	-> proxy('http://localhost:80/cgi-bin/disttmx.cgi');

    my $soapresult = $soapserver->traduzes(param("l1"),param("l2"));

    unless($soapresult->fault) {
      my $result = $soapresult->result();
      if ($result) {
	print div({style=>"border: solid 1px #000; padding: 2px; background-color: #aaffaa"},
		  "Sim, este servidor suporta tradução entre '",param("l1"),"' e '",param("l2"),"'")
      } else {
	print div({style=>"border: solid 1px #000; padding: 2px; background-color: #ffaaaa"},
		  "Não, este servidor não suporta tradução entre '",param("l1"),"' e '",param("l2"),"'")
      }
    } else {
      print "Error: ",$soapresult->faultcode,": ",$soapresult->faultstring;
    }
    print end_html;


  } else {
    print header;
    print start_html("MT Distribuída"), h2("Serviço não implementado"), end_html;
  }
}

__END__

my $soapserver = SOAP::Lite
  -> uri('http://localhost:80/disttmx')
  -> proxy('http://localhost:80/cgi-bin/disttmx.cgi');

my $soapresult = $soapserver->concordance("pt","en","european parliament");

unless($soapresult->fault) {
  my $result = $soapresult->result();

  if ($result) {
    print Dumper($result);
  } else {
    print STDERR "** server does not know how to translate it **\n";
  }
} else {
  print $soapresult->faultcode,": ",$soapresult->faultstring;
}
