#!/usr/bin/perl

use CGI;

CGI::ReadParse();

#################################################################################


sub get_newdomain {
	print "<form method=post>
new domain: <input type=text name=domain>
<input type=hidden name=more value=1>
</form>
";
}


#################################################################################


sub compose_dataset {
	$in{'table'} = "page" if(!$in{'table'});
	print "<form method=post>";
	if($in{'attr'}) {
		$in{"$in{'table'}-$in{'attr'}"} = "$in{'type'}:$in{'size'}:$in{'edit'}:$in{'search'}";
	}
	print "<input type=hidden name=domain value=$in{'domain'}>";

	$delk="";
	foreach $k (keys %in) {
		if($k =~ /^delete-/) {
			$delk = $k;
			$delk =~ s/^delete-//;
		}
	}
	foreach $k (keys %in) {
		if($k ne "table" && $k ne "attr" && $k ne "type"
		&& $k ne "size" && $k ne "edit" && $k ne "search"
		&& $k ne "more" && !($k =~ /^step/) && $k ne "domain"
		&& !($k =~ /^delete-/) && $k ne $delk) {
			print "<input type=checkbox name=delete-$k>($k) $in{$k}<br>";
			print "<input type=hidden name=$k value=$in{$k}>";
		}
	}

	print "table:<input type=text name=table value=\"$in{'table'}\">";
	print "attr:<input type=text name=attr>";
	print "type:<select name=type><option>char<option>text<option>int<option>date<option>time</select>";
	print "size:<input type=text name=size size=3>";
	print "edit: <input type=checkbox name=edit checked>";
	print "search: <input type=checkbox name=search>";
	print "<br><input type=submit name=more value=more>";
	print "<input type=submit name=step1 value=\"next step\"></form>";
	
}

#################################################################################


sub dataset_ready {

	$sqlstatement = "CREATE TABLE $in{'domain'}_conn (
	item_sid(11) NOT NULL default '0',
	$in{'domain'}_page int(11) NOT NULL default '0',
	location varchar(64) NOT NULL default '',
	page int(4) default '0',
	linked int(11) NOT NULL default '0',
	PRIMARY KEY(item_sid,$in{'domain'}_page,location)
);

";

	print "<form method=post>";
	print "<input type=hidden name=domain value=$in{'domain'}>";
	$otable="";
	foreach $k (keys %in) {
		if($k ne "table" && $k ne "attr" && $k ne "type"
		&& $k ne "size" && $k ne "edit" && $k ne "search"
		&& $k ne "more" && !($k =~ /^step/) && $k ne "domain") {
			($table,$attr) = split(/-/,$k);
			if($table ne $otable) {
				if($otable ne "") {
					$sqlstatement .= "	PRIMARY KEY (ID,location)\n);\n\n";
				}
				$otable=$table;
				$sqlstatement .= "CREATE TABLE $in{'domain'}_$table (\n";
				$sqlstatement .= "	ID int(11) NOT NULL default '0',\n";
				$sqlstatement .= "	location varchar(64) NOT NULL default '',\n";
			}
			($type,$size,$edit,$search) = split(/:/,$in{$k});
			$sqltype = "varchar($size) default NULL,\n" if($type eq "char");
			$sqltype = "text,\n" if($type eq "text");
			$sqltype = "int($size),\n" if($type eq "int");
			$sqltype = "int(11),\n" if($type eq "date");
			$sqltype = "int(11),\n" if($type eq "time");
			$sqlstatement .= "	$attr $sqltype";
			print "<input type=hidden name=$k value=$in{$k}>";
		}
	}
	$sqlstatement .= "	PRIMARY KEY (ID,location)\n);\n\n";
	print "<textarea name=sqlstatement cols=80 rows=36>$sqlstatement</textarea><br>";
	print "<input type=submit name=step2 value=\"next step\">";
	print "</form>";
}



#################################################################################

sub create_backend {
	print "create backend";


	$routine = <<'EOT';

sub emask {
    local $ra_files, $deps;

    $ra_file = $deps = "";

    $st=$db->prepare("SELECT * FROM treemap ORDER BY node");
    $st->execute();
    while(@row=$st->fetchrow()) {
        $deps .=  "<option value=$row[0]>$row[1]";
    }
    $st->finish();


    open(P,"/bin/ls $OPA::DOWNLOAD/$ENV{'REMOTE_USER'}/* 2> /dev/null |");  
    while(<P>)
    {
        $_ =~ s/$OPA::DOWNLOAD\/$ENV{'REMOTE_USER'}\///g;
        $_ = "<OPTION> $_";
        $ra_files .= $_;
    }
    close(P);

    print "
$OPA::OPA_BODY
<b>[Image]</b>


<form method=post>
EOT



	foreach $k (keys %in) {
		if($k ne "table" && $k ne "attr" && $k ne "type"
		&& $k ne "size" && $k ne "edit" && $k ne "search"
		&& $k ne "more" && !($k =~ /^step/) && $k ne "domain") {
			($table,$attr) = split(/-/,$k);
			($type,$size,$edit,$search) = split(/:/,$in{$k});
			$size=10 if(!$size);

			if($edit eq "on") {
				if($type ne "text") {
					$routine .= "$attr: <input type=text name=$attr size=$size<br>\n";
				} else {
					$routine .= "$attr<br><textarea wrap=virtual name=$attr cols=70 rows=12></textarea><br>\n";
				}
			}
		}
	}

	$routine .= <<'EOT';
<input type=hidden name=op value=proof>
<input type=submit value="I have the right to publish this material.">
</form>
EOT

	print "$routine";
}

print "OMA Domain Contructor <b>$in{'domain'}</b><p>\n";
get_newdomain if(!$in{'domain'});

compose_dataset if($in{'more'});
dataset_ready if($in{'step1'});
create_backend if($in{'step2'});
