package kamishibai;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.URL;
public class Kamishibai extends JApplet {
    public void init(){
	Container contentPane = getContentPane();
	String number = getParameter("number");
	if(number==null) return;
	int n = Integer.parseInt(number);
	String[] filename = new String[n];
	String[] option = new String[n];
	Image image;
	MediaTracker tracker = new MediaTracker(this);
	URL documentBase = getDocumentBase();
	ImagePanel panel = new ImagePanel(n);
	for(int i=0; i<n; i++){
	    filename[i]=getParameter("image_"+(i+1));
	    option[i]=getParameter("option_"+(i+1));
	    image = getImage(documentBase,filename[i]);
	    panel.addImage(i,image);
	    tracker.addImage(image,i);
	}
	try{
	    tracker.waitForAll();
	}catch(InterruptedException e){}
	JPanel buttonPanel = new JPanel();
	JButton backButton = new JButton("<");
	JButton forwardButton = new JButton(">");
	JButton startButton = new JButton("|<");
	JButton endButton = new JButton(">|");

	buttonPanel.setBackground(Color.white);
	buttonPanel.add(startButton);
	buttonPanel.add(backButton);
	buttonPanel.add(forwardButton);
	buttonPanel.add(endButton);
	contentPane.add(buttonPanel,BorderLayout.SOUTH);
	contentPane.add(panel);
	endButton.addActionListener(panel.new ButtonAction(new EndButton(n)));
	backButton.addActionListener(panel.new ButtonAction(new BackwordButton()));
	forwardButton.addActionListener(panel.new ButtonAction(new ForwardButton(n)));
	startButton.addActionListener(panel.new ButtonAction(new StartButton()));

    }
}
interface ButtonFunction {
    int action(int current);
}
class ForwardButton implements ButtonFunction {
    int max;
    public ForwardButton(int n){
	max=n-1;
    }
    public int action(int current){
	return (current<max)?(current+1):max;
    }
}
class EndButton implements ButtonFunction {
    int max;
    public EndButton(int n){
	max=n-1;
    }
    public int action(int current){
	return max;
    }
}
class BackwordButton implements ButtonFunction {
    public int action(int current){
	return current>0?current-1:0;
    }
}

class StartButton implements ButtonFunction {
    public int action(int current){
	return 0;
    }
}


class ImagePanel extends JPanel{
    private Image[] images;
    private int counter;
    public ImagePanel(int n){
	images = new Image[n];
	counter=0;
	setBackground(Color.white);
    }
    public void addImage(int n,Image image){
	images[n]=image;
    }
    public int getCounter(){
	return counter;
    }
    public void setCounter(int n){
	counter=n;
	repaint();
    }
    public void paintComponent(Graphics g){
	super.paintComponent(g);
	g.drawImage(images[counter],0,0,null);
    }
    public class ButtonAction implements ActionListener {
	private ImagePanel imagePanel;
	private ButtonFunction buttonFunction;
	public ButtonAction(ButtonFunction bf){
	    buttonFunction=bf;
	}
	public void actionPerformed(ActionEvent event){
	    setCounter(buttonFunction.action(getCounter()));
	}
    }
}
	

