package org.fissore.cooee2impress.linuxday;

import java.util.LinkedList;
import java.util.List;

import org.fissore.cooee2impress.Presentation;
import org.fissore.cooee2impress.Slide;
import org.fissore.cooee2impress.Topic;
import org.fissore.cooee2impress.templates.LabelListTemplate;
import org.fissore.cooee2impress.templates.MessageSlide;
import org.karora.cooee.app.Alignment;
import org.karora.cooee.app.Component;
import org.karora.cooee.app.HttpImageReference;
import org.karora.cooee.app.Insets;
import org.karora.cooee.app.Row;
import org.karora.cooee.app.layout.RowLayoutData;

public class PresentationBuilder {

	private PresentationBuilder() {
	}

	public static Presentation buildSlideHierarchy() {

		Topic intro = new Topic("Presentazione");
		Slide introSlide = new Slide("Presentazione", new HttpImageReference(
				"images/kuser.png"));
		intro.add(introSlide);
		introSlide.setContent(new Intro());

		Topic agenda = new Topic("Agenda");
		Slide agendaSlide = new Slide("Agenda", new HttpImageReference(
				"images/korganizer.png"));
		agenda.add(agendaSlide);
		agendaSlide.setContent(buildSlideAgenda());

		Topic ria = new Topic("Rich Internet Applications");
		Slide riaSlide = new Slide("Rich Internet Applications",
				new HttpImageReference("images/ajax.png"));
		ria.add(riaSlide);
		riaSlide.setContent(buildSlideRIA());

		Topic cooee = new Topic("Cooee");
		Slide cooeeSlide = new Slide("Chi/Cos'è Cooee", new HttpImageReference(
				"images/built-with.png"));
		cooee.add(cooeeSlide);
		cooeeSlide.setContent(buildSlideCooee());

		// echoSlide = new Slide("MPL/GPL/LGPL?", new HttpImageReference(
		// "images/mpl-gpl.png"));
		// echo.add(echoSlide);
		// echoSlide.setContent(new License());

		Topic caratt = new Topic("Caratteristiche di Cooee");
		Slide carattSlide = new Slide("Caratteristiche di Cooee",
				new HttpImageReference("images/kmenuedit.png"));
		caratt.add(carattSlide);
		carattSlide.setContent(buildSlideCaratt());

		carattSlide = new Slide("3 Package", new HttpImageReference(
				"images/java_jar.png"));
		caratt.add(carattSlide);
		carattSlide.setContent(buildSlidePackage());

		Topic helloWorld = new Topic("Hello world!");
		Slide helloWorldSlide = new Slide("Hello world!",
				new HttpImageReference("images/gaim.png"));
		helloWorld.add(helloWorldSlide);
		helloWorldSlide.setContent(new MessageSlide(
				"Hello world? Hello Pizza!", 40, 150));

		Topic sessione = new Topic("Server side");
		Slide sessioneSlide = new Slide("Server side", new HttpImageReference(
				"images/kcmmemory.png"));
		sessione.add(sessioneSlide);
		sessioneSlide.setContent(buildSlideSessione());

		Topic vantaggi = new Topic("Vantaggi e svantaggi");
		Slide vantaggiSlide = new Slide("In ordine...", new HttpImageReference(
				"images/vantaggi.png"));
		vantaggi.add(vantaggiSlide);
		vantaggiSlide.setContent(buildSlideVantaggi1());

		vantaggiSlide = new Slide("...sparso", new HttpImageReference(
				"images/vantaggi.png"));
		vantaggi.add(vantaggiSlide);
		vantaggiSlide.setContent(buildSlideVantaggi2());

		Topic domande = new Topic("Domande?");
		Slide domandeSlide = new Slide("Domande ?", new HttpImageReference(
				"images/help.png"));
		domande.add(domandeSlide);
		domandeSlide.setContent(new MessageSlide("Domande ?", 40, 150));

		// Topic progetti = new Topic("Progetti correlati");
		// Slide progettiSlide = new Slide("Progetti correlati",
		// new HttpImageReference("images/kig.png"));
		// progetti.add(progettiSlide);
		// progettiSlide.setContent(buildSlideProgetti());

		Topic conclusione = new Topic("Conclusione");
		Slide conclusioneSlide = new Slide("Conclusione",
				new HttpImageReference("images/conclusione.png"));
		conclusione.add(conclusioneSlide);
		conclusioneSlide
				.setContent(new MessageSlide(
						"Cooee è una fra le cose più simili a Swing che possiate mettere dentro ad un browser",
						35, 150));

		Presentation presentation = new Presentation("Linux Day 2007");
		presentation.setFirstSubTopicId(introSlide.getId());
		presentation.add(intro);
		presentation.add(agenda);
		presentation.add(ria);
		presentation.add(cooee);
		presentation.add(caratt);
		presentation.add(helloWorld);
		presentation.add(sessione);
		presentation.add(vantaggi);
		presentation.add(domande);
		// presentation.add(progetti);
		presentation.add(conclusione);

		return presentation;
	}

	// private static ContentPane buildSlideProgetti() {
	// ContentPane cp = new ContentPane();
	// Grid grid = new Grid(2);
	// cp.add(grid);
	// grid.setInsets(new Insets(10));
	//
	// ImageReference dot = new ResourceImageReference(
	// "/org/fissore/cooee2impress/image/ledblue.png");
	//
	// grid.add(new Label(dot));
	// Button button = GUIUtils.buildButton("Echo 2 Extras",
	// "http://www.nextapp.com/platform/echo2/extras/");
	// button.setFont(new Font(Font.SANS_SERIF, Font.BOLD, new Extent(16,
	// Extent.PT)));
	// grid.add(button);
	//
	// grid.add(new Label(dot));
	// button = GUIUtils.buildButton("EchoPointNG",
	// "http://echopoint.sourceforge.net/");
	// button.setFont(new Font(Font.SANS_SERIF, Font.BOLD, new Extent(16,
	// Extent.PT)));
	// grid.add(button);
	//
	// grid.add(new Label(dot));
	// button = GUIUtils.buildButton("HSE", "http://hse.sourceforge.net/");
	// button.setFont(new Font(Font.SANS_SERIF, Font.BOLD, new Extent(16,
	// Extent.PT)));
	// grid.add(button);
	//
	// grid.add(new Label(dot));
	// button = GUIUtils.buildButton("RomaFramework",
	// "http://www.romaframework.org/");
	// button.setFont(new Font(Font.SANS_SERIF, Font.BOLD, new Extent(16,
	// Extent.PT)));
	// grid.add(button);
	//
	// grid.add(new Label(dot));
	// button = GUIUtils.buildButton("Echo Core",
	// "http://sourceforge.net/projects/echocore");
	// button.setFont(new Font(Font.SANS_SERIF, Font.BOLD, new Extent(16,
	// Extent.PT)));
	// grid.add(button);
	//
	// return cp;
	// }

	private static Component buildSlideVantaggi2() {
		List labels = new LinkedList();
		labels
				.add("E' molto basico: presto vi troverete a scrivere i vostri componenti");
		labels.add("Facile se conoscete già Swing (altrimenti è divertente)");
		labels.add("Code monkey di livello più alto");
		labels
				.add("Cambiare la composizione della GUI significa riavviare la webapp (*)");
		labels.add("Comunità attiva ma piccola (IMHO)");
		// labels.add("Carenze organizzative Nextapp: bugzilla, mailing list");

		return new LabelListTemplate(labels, 10);
	}

	private static Component buildSlideVantaggi1() {
		List labels = new LinkedList();
		labels
				.add("Niente più HTML, niente più javascript: un sogno realizzato");
		// labels.add("RAD: Echo Studio");
		labels.add("Reattività");
		labels.add("Sicurezza: corrispondenza renderId e sessione");
		labels.add("Stili modificabili runtime (un po' come i Look & Feel)");
		labels.add("Facilità di scrittura di test");

		return new LabelListTemplate(labels, 10);
	}

	private static Component buildSlideSessione() {
		List labels = new LinkedList();
		labels.add("Cooee è una soluzione server-side");
		labels.add("La sessione contiene tutta l'applicazione");
		labels.add("...che quindi dev'essere tutta serializzabile");
		labels.add("Ideale nei backoffice");

		return new LabelListTemplate(labels, 10);
	}

	private static Component buildSlidePackage() {
		List labels = new LinkedList();
		labels.add("Web Rendering Engine (webrender)");
		labels.add("Application Framework (app & ng)");
		labels.add("Web Application Container (webcontainer)");

		LabelListTemplate template = new LabelListTemplate(labels, 10);

		RowLayoutData rld = new RowLayoutData();
		rld.setInsets(new Insets(5, 5));
		rld.setAlignment(new Alignment(Alignment.DEFAULT, Alignment.TOP));

		template.setLayoutData(rld);

		// Label label = new Label(new
		// HttpImageReference("images/modules.png"));
		// label.setLayoutData(rld);

		Row row = new Row();
		row.add(template);
		// row.add(label);

		return row;
	}

	private static Component buildSlideCaratt() {
		List labels = new LinkedList();
		labels.add("Solo codice java");
		labels.add("Assomiglia a Swing (nel bene!)");

		return new LabelListTemplate(labels, 10);
	}

	private static Component buildSlideCooee() {
		List labels = new LinkedList();
		labels.add("Strumento per creare interfacce grafiche");
		labels.add("Ultima versione 1.0.2 (stable). La 1.1 è in beta");
		labels.add("Tripla licenza: MPL 1.1/GPL 2.0/LGPL 2.1");

		return new LabelListTemplate(labels, 10);
	}

	private static Component buildSlideAgenda() {
		List labels = new LinkedList();
		labels.add("Rich Internet Applications");
		labels.add("Cooee");
		labels.add("Hello World!");
		labels.add("Server side");
		labels.add("Vantaggi e svantaggi");
		// labels.add("Progetti correlati");

		return new LabelListTemplate(labels, 10);
	}

	private static Component buildSlideRIA() {
		List labels = new LinkedList();
		labels.add("Comportamento della GUI");
		labels.add("Le \"pagine\" e i \"link\" non esistono");
		labels
				.add("Implementazioni per tutti i gusti (ZK, XUL, OpenLaszlo, GWT, WingS...)");

		return new LabelListTemplate(labels, 10);
	}

}
