#!/usr/bin/perl

use CGI::Carp 'fatalsToBrowser'; # Fehler sollen im Browser ausgegeben werden
use Image::Magick;
use GD;
use DBI;

require"./read.pl";
&ReadParse;

#print "Content-type: text/html\n\n";
#print "rb ".$in{'rb'}."<br>";

#st=6&f=A&rb=1&r=B&name=RCC1
$counter_name=$in{'name'}||"all";
$counter = $in{'counter'} || $counter_name;
if($counter ne "" && $counter_name eq "")
{$counter_name = $counter;}
$counter_form=$in{'f'}||"A";
$counter_rb=$in{'rb'}||"0";
$counter_r=$in{'r'}||"B";# B,GR,GE,R
$counter_st=$in{'st'}||"0";# B,GR,GE,R
$zahl=$in{'zahl'}||"";

#print "counter $counter <BR>";

$ip = $ENV{REMOTE_ADDR};
$home=$ENV{DOCUMENT_ROOT};
$ref = $ENV{HTTP_REFERER};

$digits = $home."/counter_neu/digits/".$counter_form.".gif";

$dbh = DBI->connect('DBI:mysql:db162662_49;host=mysql5.wwwcounter.net', 'db162662_49', 'pkW3GRkY96'
	           ) || die "Could not connect to database: $DBI::errstr";
$sth = $dbh->prepare("SELECT * FROM counter WHERE name='$counter_name'");
$sth->execute();
$anzahl = $sth->rows;
$result = $sth->fetchrow_hashref();

#print "Content-type: text/html\n\n";

#&Result();

sub Result(){


print "Anzeige DB <BR>";
print "Value returned f: $result->{f}<br>";
print "Value returned r: $result->{r}<br>";
print "Value returned rb: $result->{rb}<br>";
print "Value returned name: $result->{name}<br>";
print "Value returned zahl: $result->{zahl}<br>";
print "Value returned st: $result->{st}<br>";
print "Value returned: ".$anzahl."<br>";

}

if($anzahl > 0)
{
	# in DB vorhanden
	if($zahl eq "")
	{$zahl = $result->{zahl};}
		
	$zahl++;
	# counter neu schreiben
	$sth = $dbh->prepare("update counter set referer='$ref',zahl = '$zahl',f = '$counter_form',r = '$counter_r',rb = '$counter_rb',st = '$counter_st',ip = '$ip',geaendert = now() WHERE name='$counter_name'");
	$sth->execute();
	
	$sth = $dbh->prepare("SELECT * FROM counter WHERE name='$counter_name'");
	$sth->execute();
	$anzahl = $sth->rows;
	$result = $sth->fetchrow_hashref();

	$counter_name=$result->{name};
	$counter_form=$result->{f};
	$counter_rb=$result->{rb};
	$counter_r=$result->{r};
	$counter_st=$result->{st};
	
	
	$digits = $home."/counter_neu/digits/".$counter_form.".gif";

}
else
{

	# hole counter aus file
	$counterFile = $home."/counter_neu/counter/".$counter_name;


	if(open(FH,  '<', $counterFile))
	{
	while(<FH>){
	   $zahl = $_;
	}
	close(FH);
	}
	
	$counter++;
	# schreibe in DB
	$sth = $dbh->prepare("insert into counter (angelegt,name,f,r,rb,st,zahl,ip) values (now(),'$counter_name','$counter_form','$counter_r','$counter_rb','$counter_st','$zahl','$ip')");
	$sth->execute();


}
$dbh->disconnect();

#&Anzeige();

sub Anzeige(){

print "Anzeige GET <BR>";
print "Value returned name: $counter_name<br>";
print "Value returned f: $counter_form<br>";
print "Value returned r: $counter_r<br>";
print "Value returned rb: $counter_rb<br>";
print "Value returned zahl: $zahl<br>";

}

$digitsImage = GetImage($digits);

($breitEinzelDigits,$hochEinzelDigits) = $digitsImage->getBounds;



if($counter_st == 0 || $counter_st < length($zahl)){
$counter_st = length($zahl);
}

$breiteEinzel = ($breitEinzelDigits/10);
$hoeheEinzel = $hochEinzelDigits;

$breiteGesamt = $breiteEinzel * $counter_st;
$hoeheGesamt = $hochEinzelDigits;

# hintergrund bild
$farbeHintergrund = $digitsImage->getPixel(0, 0);
my ($r,$g,$b) = $digitsImage->rgb($farbeHintergrund);

#print "Content-type: text/html\n\n";
#printf "$digits %3d %3d %3d<br>", $r, $g, $b;

my $hintergrundImage = GD::Image->new($breiteGesamt,$hoeheGesamt);
$hintergrundImage->colorAllocate($r,$g,$b);
# test schwarz
#$hintergrundImage->colorAllocate(0,0,0);
my $breiteHintergrund = $breiteGesamt;
my $hoeheHintergrund = $hoeheGesamt;

# berechneung breite und hoehe 
if($counter_rb == 1){

$breiteGesamt += 12;
$hoeheGesamt += 12;

}


#print "breitEinzelDigits $breitEinzelDigits counter_st $counter_st breiteGesamt $breiteGesamt<BR>";

#exit(0);

print "Content-type: image/gif\n\n";

#erzeugen eines ersten Bildes
$image = new GD::Image($breiteGesamt,$hoeheGesamt);



# rahmen ################################################################

if($counter_rb == 1){

#print "eingang $counter_r <br>";
@rec_farbe=&Ber_Farbe($counter_r);
#$rec_farbe[2] = "255,255,255";
@einzel_farbe = split(',', $rec_farbe[2]);

#print "farbe ".$rec_farbe[2]."<br>";
#print "farbe ".$einzel_farbe[0]."<br>";
$image->colorAllocate($einzel_farbe[0],$einzel_farbe[1],$einzel_farbe[2]);# dunkelblau Hintergrund
@einzel_farbe = split(',', $rec_farbe[0]);
$blau_hell = $image->colorAllocate($einzel_farbe[0],$einzel_farbe[1],$einzel_farbe[2]); 
@einzel_farbe = split(',', $rec_farbe[1]);
$blau_normal = $image->colorAllocate($einzel_farbe[0],$einzel_farbe[1],$einzel_farbe[2]);


#$image->string(gdLargeFont,0,0,"test",$red); # einen Text ins Bild
#oben
$image->line(0,0,$breiteGesamt,0,$blau_hell);#0,0,102,0
$image->line(0,1,$breiteGesamt-3,1,$blau_hell);#0,1,99,1
#links
$image->line(0,2,0,$hoeheGesamt-2,$blau_hell);#0,2,0,30
$image->line(1,2,1,$hoeheGesamt-3,$blau_hell);#1,2,1,29
#unten
$image->line(4,$hoeheGesamt-5,$breiteGesamt-5,$hoeheGesamt-5,$blau_hell);#4,27,97,27 # 102 32
$image->line(5,$hoeheGesamt-6,$breiteGesamt-5,$hoeheGesamt-6,$blau_hell);#5,26,97,26
#rechts
$image->line($breiteGesamt-6,5,$breiteGesamt-6,$hoeheGesamt-3,$blau_hell);#96,5,96,29

#oben
$image->line(2,2,$breiteGesamt-4,2,$blau_normal);#2,2,98,2
$image->line(2,3,$breiteGesamt-4,3,$blau_normal);#2,3,98,3
#links
$image->line(2,2,2,$hoeheGesamt-3,$blau_normal);#2,2,2,29
$image->line(3,2,3,$hoeheGesamt-3,$blau_normal);#3,2,3,29
#unten
$image->line(2,$hoeheGesamt-4,$breiteGesamt-4,$hoeheGesamt-4,$blau_normal);#2,28,98,28
$image->line(3,$hoeheGesamt-3,$breiteGesamt-4,$hoeheGesamt-3,$blau_normal);#3,29,98,29
#rechts
$image->line($breiteGesamt-4,2,$breiteGesamt-4,$hoeheGesamt-3,$blau_normal);#98,2,98,29
$image->line($breiteGesamt-5,2,$breiteGesamt-5,$hoeheGesamt-3,$blau_normal);#97,2,97,29

$image->copy($hintergrundImage,6,6,0,0,$breiteHintergrund,$hoeheHintergrund);

}
else
{
$image->copy($hintergrundImage,6,6,0,0,$breiteHintergrund,$hoeheHintergrund);
}
# digits #########################################################################




# test
#$null = new GD::Image(15,20);
#$eins = new GD::Image(15,20);
#$neun = new GD::Image(15,20);
#$null->copy($digitsImage,0,0,0,0,15,20);
#$eins->copy($digitsImage,0,0,15,0,15,20);
#$neun->copy($digitsImage,0,0,(15*9),0,15,20);


while($counter_st > length($zahl))
{
$zahl = "0".$zahl;
}

#print "zahl ".$zahl."<br>";
&WriteRahmen();

sub WriteRahmen(){

@wert = split(//,$zahl);
for($i=0;$i<length($zahl);$i++){
$neu = new GD::Image($breiteEinzel,$hoeheEinzel);
$neu->copy($digitsImage,0,0,($breiteEinzel*$wert[$i]),0,$breiteEinzel,$hoeheEinzel);

if($counter_rb == 1)
{
$image->copy($neu,6+($i*$breiteEinzel),6,0,0,$breiteEinzel,$hoeheEinzel);
}
else
{
$image->copy($neu,($i*$breiteEinzel),0,0,0,$breiteEinzel,$hoeheEinzel);
}
}

}

#$image->line(30,1,1,50,$black);

# abspeichern des ersten Bildes

print $image->gif;  # das Bild selbst

sub GetImage{
$digits=shift;

if(open (GIFFILE, $digits)){
$digitsImage = newFromGif GD::Image(\*GIFFILE) || die "Couldn't read GIF data!";
close GIFFILE;

return $digitsImage;
}
else
{
return GetImage($home."/counter_neu/digits/A.gif");
}

}

sub Ber_Farbe($){
$wert=shift;
#$wert  = @_;
#print "Eingang = $wert <BR>";

if($wert eq "GR"){@lager=("163,198,154","69,139,50","36,73,0");}# gruen
if($wert eq "B"){@lager=("32,157,221","23,87,120","0,48,73");}# blau
if($wert eq "R"){@lager=("237,44,85","155,96,89","66,7,19");}# gruen
if($wert eq "GE"){@lager=("241,242,136","207,209,35","109,110,5");}# blau

#print " lager $wert ".$lager[0]."<br>";

return @lager;
}