#!/usr/bin/perl
require "../cgi-lib.pl";
ReadParse(*params);

%patterns = (
    solid => { name => 'Solid', },
    dots => { name => 'Dots', },
    lines => { name => 'Stripes', },
    diag => { name => 'Diaogonal Stripes', },
    );
%colors = (
    ltred    => { bg => 1, rgb => '255,127,127', name => 'Light Red', },
    ltorange => { bg => 1, rgb => '255,191,127', name => 'Light Orange', },
    ltyellow => { bg => 1, rgb => '255,255,127', name => 'Light Yellow', },
    ltgreen  => { bg => 1, rgb => '127,255,127', name => 'Light Green', },
    ltcyan   => { bg => 1, rgb => '127,255,255', name => 'Light Cyan', },
    ltblue   => { bg => 1, rgb => '127,127,255', name => 'Light Blue', },
    ltmag    => { bg => 1, rgb => '255,127,255', name => 'Light Magenta', },

    red      => { bg => 1, fg => 1, rgb => '191,0,0', name => 'Red', },
    orange   => { bg => 1, fg => 1, rgb => '233,127,0', name => 'Orange', },
    yellow   => { bg => 1, fg => 1, rgb => '191,191,0', name => 'Yellow', },
    green    => { bg => 1, fg => 1, rgb => '0,191,0', name => 'Green', },
    cyan     => { bg => 1, fg => 1, rgb => '0,191,191', name => 'Cyan', },
    blue     => { bg => 1, fg => 1, rgb => '0,0,191', name => 'Blue', },
    mag      => { bg => 1, fg => 1, rgb => '191,0,191', name => 'Magenta', },

    dkred    => { bg => 1, fg => 1, rgb => '127,0,0', name => 'Dark Red', },
    dkorange => { bg => 1, fg => 1, rgb => '191,63,0', name => 'Dark Orange', },
    dkyellow => { bg => 1, fg => 1, rgb => '127,127,0', name => 'Dark Yellow', },
    dkgreen  => { bg => 1, fg => 1, rgb => '0,127,0', name => 'Dark Green', },
    dkcyan   => { bg => 1, fg => 1, rgb => '0,127,191', name => 'Dark Cyan', },
    dkblue   => { bg => 1, fg => 1, rgb => '0,0,127', name => 'Dark Blue', },
    dkmag    => { bg => 1, fg => 1, rgb => '127,0,127', name => 'Dark Magenta', },

    white    => { ft => 1, bg => 1, rgb => '255,255,255', name => 'White', },
    black    => { ft => 1, fg => 1, rgb => '0,0,0', name => 'Black', },
    );

if($params{fg_rgb} =~ /(\d+),(\d+),(\d+)/) {
    ($params{fgr},$params{fgg},$params{fgb}) = ($1,$2,$3);
}
if($params{bg_rgb} =~ /(\d+),(\d+),(\d+)/) {
    ($params{bgr},$params{bgg},$params{bgb}) = ($1,$2,$3);
}
if($params{fnt_rgb} =~ /(\d+),(\d+),(\d+)/) {
    ($params{fntr},$params{fntg},$params{fntb}) = ($1,$2,$3);
}

print "Content-Type: text/html\n\n";
print "<html>\n";
print "<head>\n";
print "<style>table th { text-align: right; }</style>\n";
print "</head><body>\n";
print "<form>\n";
print "<table>\n";
print "<tr><th>Owner</th><td>";
print "<input type=\"text\" name=\"text\" value=\"".value_safe($params{text})."\">\n";
print "</td></tr>\n";
print "<tr><th>Description</th><td>";
print "<input type=\"text\" name=\"text2\" value=\"".value_safe($params{text2})."\">\n";
print "</td></tr>\n";
print "<tr><th>Dimensions</th><td>";
print "<input type=\"text\" name=\"width\" size=\"3\" value=\"".value_safe($params{width})."\">\n";
print " x ";
print "<input type=\"text\" name=\"height\" size=\"3\" value=\"".value_safe($params{height})."\">\n";
print "<select name=\"scale\">";
print "<option value=\"studs\">Studs</option>\n";
print "<option value=\"32x32\"".(($params{scale} eq "32x32") ? " selected" : "").">32x32 Baseplates</option>\n";
print "</select>\n";
print "</td></tr>\n";
print "<tr><th>Background Color</th><td>";
print "<input type=\"text\" name=\"bgr\" size=\"3\" value=\"".value_safe($params{bgr})."\"> ,\n";
print "<input type=\"text\" name=\"bgg\" size=\"3\" value=\"".value_safe($params{bgg})."\"> ,\n";
print "<input type=\"text\" name=\"bgb\" size=\"3\" value=\"".value_safe($params{bgb})."\"> (R,G,B)\n";
print " -or- ";
print "<select name=\"bg_rgb\">\n";
print "<option value=\"\">- Select -</option>\n";
foreach my $c (keys %colors) {
    next unless($colors{$c}{bg});
    print "<option value=\"$colors{$c}{rgb}\"".(($params{bg_rgb} eq $colors{$c}{rgb}) ? " selected" : "").">$colors{$c}{name}</option>\n";
}
print "</select>\n";
print "</td></tr>\n";
print "<tr><th>Foreground Color</th><td>";
print "<input type=\"text\" name=\"fgr\" size=\"3\" value=\"".value_safe($params{fgr})."\"> ,\n";
print "<input type=\"text\" name=\"fgg\" size=\"3\" value=\"".value_safe($params{fgg})."\"> ,\n";
print "<input type=\"text\" name=\"fgb\" size=\"3\" value=\"".value_safe($params{fgb})."\"> (R,G,B)\n";
print " -or- ";
print "<select name=\"fg_rgb\">\n";
print "<option value=\"\">- Select -</option>\n";
foreach my $c (keys %colors) {
    next unless($colors{$c}{fg});
    print "<option value=\"$colors{$c}{rgb}\"".(($params{fg_rgb} eq $colors{$c}{rgb}) ? " selected" : "").">$colors{$c}{name}</option>\n";
}
print "</select>\n";
print "</td></tr>\n";

print "<tr><th>Font Color</th><td>";
print "<input type=\"text\" name=\"fntr\" size=\"3\" value=\"".value_safe($params{fntr})."\"> ,\n";
print "<input type=\"text\" name=\"fntg\" size=\"3\" value=\"".value_safe($params{fntg})."\"> ,\n";
print "<input type=\"text\" name=\"fntb\" size=\"3\" value=\"".value_safe($params{fntb})."\"> (R,G,B)\n";
print " -or- ";
print "<select name=\"fnt_rgb\">\n";
print "<option value=\"\">- Select -</option>\n";
foreach my $c (keys %colors) {
    next unless($colors{$c}{ft});
    print "<option value=\"$colors{$c}{rgb}\"".(($params{fnt_rgb} eq $colors{$c}{rgb}) ? " selected" : "").">$colors{$c}{name}</option>\n";
}
print "</select>\n";
print "</td></tr>\n";

print "<tr><th>Pattern</th><td>\n";
print "<select name=\"pattern\">\n";
foreach my $p (keys %patterns) {
    print "<option value=\"$p\"".(($params{pattern} eq $p) ? " selected" : "").">$patterns{$p}{name}</option>\n";
}
print "</select>\n";
print "</td></tr>\n";
print "<tr><td colspan=2 style=\"text-align: center;\"><input type=\"submit\" value=\"Create\"></td></tr>\n";
print "</table>\n";
print "</form>\n";

if($params{width} =~ /\d+/ || $params{height} =~ /\d+/) {
    my($w,$h);
    $w = ($params{scale} eq "32x32") ? 32*$params{width} : $params{width};
    $h = ($params{scale} eq "32x32") ? 32*$params{height} : $params{height};
    print "<br><img src=\"train_square.pl?width=".url_safe($w)."&height=".url_safe($h);
    print "&dark=".url_safe($params{fgr}).",".url_safe($params{fgg}).",".url_safe($params{fgb});
    print "&light=".url_safe($params{bgr}).",".url_safe($params{bgg}).",".url_safe($params{bgb});
    print "&font_color=".url_safe($params{fntr}).",".url_safe($params{fntg}).",".url_safe($params{fntb});
    print "&pattern=".url_safe($params{pattern});
    print "&text=".url_safe($params{text});
    print "&text2=".url_safe($params{text2});
    print "\">\n";
}

print "</body>\n";
print "</html>\n";

sub url_safe {
    my($val) = @_;
    $val =~ s/([^A-Za-z0-9,\.\:\-\_ ])/"%".sprintf("%02x",ord($1))/ges;
    $val =~ s/ /\+/gs;
    return $val;
}

sub value_safe {
    my($val) = @_;
    $val =~ s/\"/&quot;/gsi;
    return $val;
}
