#!/usr/bin/perl -w

use DBI;
$server = 'localhost';
$dbase = "ets";
my ($id1, $id2, $id3, $id4, $Bildbeschreibung, $Pictobeschreibung, $count);

my $dbh = DBI->connect("dbi:mysql:$dbase:$server",'','')
    or Carp::confess($DBI::errstr);

$sql_ARK  = qq(select Artikelkopf.id,
                      Artikelname,
                      Kommentar
                 from Artikelkopf
                order by Artikelkopf.id);
$sql_ARK_hnd = $dbh->prepare($sql_ARK) or Carp::confess("$sql_ARK: $DBI::errstr");

$sql_LB  = qq(select Zwischenzeile.id,
                     Zwischenzeile.Text
                from Zwischenzeile
               where Zwischenzeile.Artikelkopf = ?
               order by Zwischenzeile.id );
$sql_LB_hnd = $dbh->prepare($sql_LB) or Carp::confess("$sql_LB: $DBI::errstr");

$sql_LI  = qq(select Beschreibung.id,
                     Beschreibung.Text
                from Beschreibung
               where Beschreibung.Artikelkopf = ?
               order by Beschreibung.id);
$sql_LI_hnd = $dbh->prepare($sql_LI) or Carp::confess("$sql_LI: $DBI::errstr");

$sql_TR  = qq(select Technische_Daten.id,
                     Technische_Daten.Eigenschaft,
                     Technische_Daten.Spezifikation
                from Technische_Daten
               where Technische_Daten.Artikelkopf = ?
               order by Technische_Daten.id );
$sql_TR_hnd = $dbh->prepare($sql_TR) or Carp::confess("$sql_TR: $DBI::errstr");

$sql_ART  = qq(select Artikel.id,
                      Artikel.Artikelbezeichnung,
                      Artikel.Attribut,
                      Artikel.Bestellnummer,
                      Artikel.EANNummer,
                      Artikel.Verkaufspreis
                 from Artikel
                where Artikel.Artikelkopf = ?
                order by Artikel.id );
$sql_ART_hnd = $dbh->prepare($sql_ART) or Carp::confess("$sql_ART: $DBI::errstr");

$sql_BILDER  = qq(select Bilder.id,
                      Bilder.Bildbeschreibung,
                      Bilder.Bildreferenz
                 from Bilder
                where Bilder.Artikelkopf = ?
                order by Bilder.id );
$sql_BILDER_hnd = $dbh->prepare($sql_BILDER) or Carp::confess("$sql_BILDER: $DBI::errstr");


$sql_PICTOS = qq(select Pictos.id,
                        Pictos.Pictobeschreibung,
                        Pictos.Pictoreferenz
                   from Pictos
                  where Pictos.Artikelkopf = ?
                  order by Pictos.id );
$sql_PICTOS_hnd = $dbh->prepare($sql_PICTOS) or Carp::confess("$sql_PICTOS: $DBI::errstr");

print "\\input Style.tex\n\n";

$sql_ARK_hnd->execute();
while( ($id, $Artikelname, $Kommentar) = $sql_ARK_hnd->fetchrow_array()) { $j++ }
$j--;
$sql_ARK_hnd->execute();
while( ($id, $Artikelname, $Kommentar) = $sql_ARK_hnd->fetchrow_array())
  {

  @Bilder = ();
  $sql_BILDER_hnd->execute($id);
  while( ($id1, $Bildbeschreibung, $Bildreferenz) = $sql_BILDER_hnd->fetchrow_array())
    {
      push @Bilder, $Bildreferenz;
    }

  if ( @Bilder )
    {
      print "\\PRODUKT\\BILDER ", join ';', map { $_ } @Bilder;
      print ";\n";
    }
  else
    {
      print "\\PRODUKT\\relax\n";
    }

  @Pictos = ();
  $sql_PICTOS_hnd->execute($id);
  while( ($id1, $Pictobeschreibung, $Pictoreferenz) = $sql_PICTOS_hnd->fetchrow_array())
    {
      push @Pictos, code($Pictoreferenz);
    }

  if ( @Pictos )
    {
      print "\\hbox\{%\n";
      if (scalar(@Pictos) > 5)
        {
          $i = 1;
	  foreach $Picto (@Pictos)
	    {
              if ($i == 1)
                {
	          print "\\vbox to 26,3mm{\\Picto{$Picto}\\vfill";
                  $i = 2;
                }
              else
                {
	          print "\\Picto{$Picto}}\\hskip4dd%\n";
                  $i = 1;
                }
	    }
          print "}" if $i == 2;
	}
      else
	{
	  foreach $Picto (@Pictos)
	    {
	      print "\\Picto{$Picto}\\hskip4dd%\n";
	    }
	}
      print "}\n";
    }

  $sql_LB_hnd->execute($id);
  while( ($id1, $Text) = $sql_LB_hnd->fetchrow_array())
    {
      print "\\LB **",code($Text),"**\n";
    }
  print "\\ARK **",code($Artikelname),"**",code($Kommentar),"**\n";

  $sql_LI_hnd->execute($id);
  while( ($id3, $Text) = $sql_LI_hnd->fetchrow_array())
    {
      print "\\LI  **", code($Text), "**\n";
    }

  @Technische_Daten = ();
  $sql_TR_hnd->execute($id);
  while( ($id2, $Eigenschaft, $Spezifikation) = $sql_TR_hnd->fetchrow_array())
    {
     if ($Eigenschaft eq "TEXT" )
       {
	 push @Technische_Daten, "\\REM **",code($Spezifikation),"**\n\n";
       }
     else
       {
	 push @Technische_Daten, "\\TR **",code($Eigenschaft),"**",code($Spezifikation),"**\n\n";
       }
    }

  if (@Technische_Daten)
    {
      print "\\HR\n\\TABLE\n", join '', map { $_ } @Technische_Daten;
    }

  print "\n";
  print "\\ARTTABLE\n";
  $sql_ART_hnd->execute($id);
  while( ($id4, $Artikelbezeichnung,
          $Attribut, $Bestellnummer,
          $EANNummer, $Verkaufspreis) = $sql_ART_hnd->fetchrow_array())
    {
      print "\\ART **",code($Artikelbezeichnung),
                  "**",code($Attribut),
                  "**",$Bestellnummer,
                  "**",$EANNummer,
                  "**",$Verkaufspreis,"**\n\n";
    }
  print "\n\n";
  print "\\vfill\n" if $count++ < $j;
  }

print "\\eject\n\\end\n";

sub code

  {
  $_ = shift @_;
  s/%/\\char37/g;
  s/
/\\LF /g;
  s/®/\\R/g;
  s/°/\\char202\\ /g;
  return $_;
  }