#!/opt/local/bin/perl

use Image::Magick;
use CGI;

require "../../lib/mysql.pl";

$cgi = new CGI();
$pickup = $cgi->param('pickup');
$name = $cgi->param('name');
$from = $cgi->param('from');
$date = $cgi->param('date');

unless (-e "../assets/sm_$pickup.jpg" && !$name) {
	&open_database_connection;
	if (!$name) {
		($name, $message) = $db->selectrow_array("SELECT recipName, message FROM ecards WHERE pickupCode='$pickup'");
		if (!$name) { $name = "AnOnyMOUs"; }
	}
	if ($name ne "John Q. Public") {
		$cid = $db->selectrow_array("SELECT cardID FROM ecards WHERE pickupCode='$pickup'");
		if (!$cid) {
			$db->do("INSERT INTO ecards (pickupCode, cardType, created) VALUES ('$pickup', 'lucktransfer', now())");
			$cid = $db->selectrow_array("SELECT last_insert_id()");
		}
		$db->do("UPDATE ecards SET printName=\"$from\", recipName=\"$name\" WHERE cardID=$cid");
	}
	&close_database_connection;
	
	$card = Image::Magick->new;
	$card->ReadImage('../templates/Luck-Transfer-sm.png');
	$card->Annotate(font=>'../fonts/OlicanaRough.otf', pointsize=>22, fill=>'black', text=>$name, x=>441, y=>301, align=>Center, antialias=>true);
	$card->Annotate(font=>'../fonts/OlicanaRough.otf', pointsize=>16, fill=>'black', text=>&dateday($date), x=>313, y=>326, align=>Center, antialias=>true);
	$card->Annotate(font=>'../fonts/OlicanaRough.otf', pointsize=>18, fill=>'black', text=>&datemonth($date), x=>414, y=>326, align=>Center, antialias=>true);
	$card->Annotate(font=>'../fonts/OlicanaRough.otf', pointsize=>18, fill=>'black', text=>&dateyear($date), x=>501, y=>326, align=>Center, antialias=>true);
	$card->Annotate(font=>'../fonts/JohnSpeedOrnamental.ttf', pointsize=>22, fill=>'black', text=>$from, x=>451, y=>376, align=>Center, antialias=>true);
	$card->Set(quality=>90, magick=>'jpeg');
	$card->Resize(width=>700, height=>int($card->Get('height') * 700 / $card->Get('width')));
	$card->Write("../assets/sm_$pickup.jpg");
}

print $cgi->redirect("../assets/sm_$pickup.jpg?" . rand());


sub datefmt {
	my ($date) = @_;
	my ($mm,$dd,$yyyy) = split("/", $date);
	return int($dd) . &suffix(int($dd)) . " day of " . &monthname(int($mm)) . " $yyyy";
}

sub dateday {
	my ($date) = @_;
	my ($mm,$dd,$yyyy) = split("/", $date);
	return int($dd) . &suffix(int($dd));
}

sub datemonth {
	my ($date) = @_;
	my ($mm,$dd,$yyyy) = split("/", $date);
	return &monthname(int($mm));
}

sub dateyear {
	my ($date) = @_;
	my ($mm,$dd,$yyyy) = split("/", $date);
	return $yyyy;
}

sub suffix {
	my ($d) = @_;
	my (@suffixes) = ("st", "nd", "rd", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th", "th", "st");
	if ($d<4 || ($d>20 && int(substr($d,-1))<4)) {
		return "st" if (substr($d,-1)==1);
		return "nd" if (substr($d,-1)==2);
		return "rd" if (substr($d,-1)==3);
	}
	return "th";
}

sub monthname {
	my ($m) = @_;
	my (@M) = ("", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
	return $M[$m];
}