import java.io.*;
import java.util.*;
import java.lang.reflect.*;

class PageSlides extends AbstractPage {

  String linkStyle=" STYLE='font-size:10pt;font-weight:bold;color:#000000;text-decoration:none;font-family:\"Verdana\",\"Arial\",\"sans-serif\"'";

  String slideStyle=" STYLE='font-size:16pt;color:#000000;text-decoration:none;font-family:\"Verdana\",\"Arial\",\"sans-serif\"'";

  File dir;
  File pageDir;

  Vector pictures;

  void makePage(Template t) throws IOException {
    PrintStream output = new PrintStream(new BufferedOutputStream(new FileOutputStream(pageName())));

    int perRow = pictureParameters.thumbsPerRow;

    t.prefix(output, 0);
    output.println("<table cellspacing="+pictureParameters.cellSpacing+">");
    int i;

    String thumbs = "../"+URLEncoder.encode(pageName());

    for (i = 0; i < pictures.size() ; i++) {
      PageSlide p = (PageSlide)(pictures.elementAt(i));
      String prev_pict = i == 0 ? null : ((PageSlide)(pictures.elementAt(i-1))).pageFileReferenceNoDir();
      String next_pict = i == pictures.size()-1 ? null : ((PageSlide)(pictures.elementAt(i+1))).pageFileReferenceNoDir();

      p.makePage(new TemplateTable(t, (int) pictureParameters.pageWidthLimit, prev_pict, next_pict, thumbs,
				   " align=left " + slideStyle));
      if (i % perRow == 0) output.println("<tr>");
      output.println("<td align=center valign=center width="+
		     pictureParameters.thumbWidthLimit+
		     " height="+pictureParameters.thumbHeightLimit+
		     ">" +
		     "<a href=\""+p.pageFileName+"\""+linkStyle+">"+
		     p.descriptiveText +
		     "</a></td>");
      if (i % perRow == perRow - 1) output.println("</tr>");
    }
    while (i % perRow != 0) {
      output.println("<td>&nbsp;</td>");
      if (i % perRow == perRow - 1) output.println("</tr>");
      i++;
    }
    output.println("</table>");
    t.suffix(output, 0);
    output.close();
  }

  PageSlides(String base, PictureParameters pp) {
    pictureParameters = pp;
    title = base;
    pictures = new Vector();

    System.err.println("Generating images from directory " + base);

    try {
      in = new BufferedReader(new FileReader(base + ".txt"));
      dir = new File(base);
      if (!dir.isDirectory()) {
	error = "Could not open the directory " + base;
      }

      File parentDir = dir.getParentFile();
      pageDir = new File(parentDir, dir.getName()+"_pages");
      
      if (!pageDir.isDirectory()) {
	pageDir.mkdir();
      }
    } catch (IOException ex) {
      ex.printStackTrace();
      error = "Could not open the page description file " + base + ".txt";
    }

    if (error == null) {
      try {
	skipWhite();
	while (lastLine != null) {
	  pictures.add(new PageSlide(this, pictureParameters));
	  skipWhite();
	}
      } catch (IOException ex) {
	ex.printStackTrace();
	error = "Problem reading data for file " + lastLine;
      }
    }
  }
}
