#!/usr/bin/perl5 -w
# 漢字コード EUC
#認証を確認してリダイレクト

use SIC;
use Cycom;
use Cycom::Util::Func;
use SICX::Comm;
use SICX::U;
use SICX::Comm::U;

use DB_File::Lock;
use SIC;
use SICX::Site;

my ( $comm, $cgi, $siteid, $areaid, $unitid, $dbm, $unit, %maindbm, $module, $jb );

$comm = SICX::Comm::U->new();
$siteid = $comm->{cgi}->param('siteid') || '';

#システムメンテナンス中は更新不可とする。
if (0){
	$dbm = join '/', '/home/SIC/sites',  $siteid, 'system/main.dbm';
	%maindbm = ();
	if ( tie %maindbm, 'DB_File::Lock', $dbm, O_RDWR|O_CREAT, 0644, $DB_HASH, 'write' ){
    	if ( ( $maindbm{'maintenance'} || 0) eq '1' ){
        	&print_error($maindbm{'maintenance_message'} || 'ただいま、システムのメンテナンス中です。');
	        exit;
    	}
	}
}
#パラメータチェック
$cgi = $comm->{cgi};
$areaid = $cgi->param("areaid");
$unitid = $cgi->param("unitid");
unless ($areaid and $unitid) {
    require Cwd;
    my $dir = Cwd::cwd();
    $dir = readlink($dir) while -l $dir;

    if ($dir =~ m#/units/([0-9a-zA-Z_-]{5})/([0-9a-zA-Z_-]+)$#) {
        $areaid = $1;
        $unitid = $2;
    } elsif ( $dir =~ m#/units/([0-9a-zA-Z_-]{5})/([0-9a-zA-Z_-]+)/i# ){
        $areaid = $1;
        $unitid = $2;
    }
};
unless (is_valid_id($areaid) and is_valid_id($unitid)) {
    &print_error("Invalid unit param");
    exit;
}

$siteid = $cgi->param("siteid") || $siteid;
unless ($siteid) {
    require SICX::Misc::uri2siteid;
    my $uri2siteid = SICX::Misc::uri2siteid->new($comm);
    my $uri = $ENV{SCRIPT_URI} || "";
    $siteid = $uri2siteid->uri2siteid($uri) || "";
};
is_valid_id($siteid) or $siteid = "";

#$module = $comm->find_module_unit("SICX::U", $areaid, $unitid, siteid=>$siteid) or return 0;
#$comm->require_module($module) or return 0;
#SICX::U のカスタマイズはしない！
$unit = SICX::U->new($comm, $areaid, $unitid, $siteid);#$module->new($comm, $areaid, $unitid, $siteid);

unless (-d $unit->DATA_DIR()) {
    &print_error("No such unit");
    exit;
}
$comm->{unit} = $unit;

$jb = $cgi->param('jb') || '';
$module = join '::', 'SICX::Proc::U', $jb;

unless ($comm->start($module, $unit)) {
    $comm->error();
}


#
$comm->finish();

exit(0);


sub print_error {
    my $comm = shift;
    my $msg = shift;
    print $comm->{http}->header();
    print $comm->{html}->header();
    print $msg;
    print $comm->{cgi}->end_html();
    return 1;
}
