#!/usr/bin/perl -s
use strict;
use MBGD;
use MBGD::WWW;
use RECOG::PhylopatCluster;
require "MBGD_Conf.pl";

###############################################################################
#
sub printErrorMsg {
    my($msg) = shift;

    print STDERR "DBG :: $msg\n";

    print "Content-type: text/html\n";
    print "\n";
    print "<h1>$msg</h1>\n";

}

###############################################################################
#
sub phylopatCluster {
    my($opt) = shift;
    my($sta);

    #
    my($phylopatCluster) = RECOG::PhylopatCluster->new($main::MYSQL_DBRECOG);

    #
    my($sta) = $phylopatCluster->existsClustTab($opt->{'SRC_CLUST_TAB_ID'});
    if (!$sta) {
        my($eid) = $PhylopatCluster::ERRNO_NO_CLUST_TAB;
        my($emsg) = $PhylopatCluster::ERRMSG{"$eid"};
        printErrMsgExit($eid, $emsg, $opt->{'SRC_CLUST_TAB_ID'});
    }

    #
    $sta = $phylopatCluster->existsByArgs($opt);
    if ($sta != $PhylopatCluster::EXISTS) {
        # $B$=$N$h$&$J>r7o$N(B phylopatCluster $B7k2L$OB8:_$7$J$$(B
        # ---> $B%/%i%9%?%j%s%0<B9T(B
        $phylopatCluster->execByArgs($opt);
        sleep(1);
    }

    #
    for(;;) {
        my($clustTabId) = $phylopatCluster->getIdByArgs($opt);

        #
        $sta = $phylopatCluster->getStatusByClusterId($clustTabId);
        if ($sta == $PhylopatCluster::STA_ERROR) {
            # $B%/%i%9%?%j%s%0$G%(%i!<(B
            $phylopatCluster->printStatusHtml($clustTabId);
        }
        elsif ($sta == $PhylopatCluster::STA_FINISHED) {
            # $B%/%i%9%?%j%s%0=*N;(B ---> $B7k2LI=<((B
            $phylopatCluster->printResultHtml($clustTabId);
        }
        elsif ($sta == $PhylopatCluster::STA_READY) {
            # $B$J$<!)%/%i%9%?%j%s%0$,3+;O$7$F$$$J$$!*(B
            $phylopatCluster->execByArgs($opt);
            sleep(1);
            redo;
        }
        else {
            # $B%/%i%9%?%j%s%0Cf(B
            $phylopatCluster->printStatusHtml($clustTabId);
        }

        last;
    }

    return;
}

###############################################################################
if ($0 eq __FILE__) {
    my($www) = MBGD::WWW->new;
    my($cgi) = $www->cgi;

    my(%args)  = $www->cgiGetArgs;

    if ($main::TAB_ID) {
        $args{'SRC_CLUST_TAB_ID'} = $main::TAB_ID;
    }
    if ($main::MODE) {
        $args{'mode_cluster'} = $main::MODE;
    }

    #
    my($opt) = {};
    if (! exists($args{'SRC_CLUST_TAB_ID'})) {
        my($eid) = $PhylopatCluster::ERRNO_NG_OPTIONS;
        my($emsg) = $PhylopatCluster::ERRMSG{"$eid"};
        printErrMsgExit($eid, $emsg);
    }

    #
    my(@key_list) = ('SRC_CLUST_TAB_ID',
                     'mode_cluster',
                     'min_exist',
                     'cutoff',
                     'missdist_ratio',
                     'probcut',
                     'disttype',
                     'clust_tab_id',
                     );
    foreach my$k (@key_list) {
        next if (! exists($args{"$k"}));

        $opt->{"$k"} = $args{"$k"};
    }

    phylopatCluster($opt);
}

###############################################################################
1;#
###############################################################################
