package turgen.plugin;


import java.io.*;
import javax.swing.*;
import turgen.playlist.AbstractPlayListItem;
import turgen.tapeimage.DataChunk;
import turgen.tapeimage.TapeImageChunk;
import turgen.tapeimage.TurboChunk;

public interface Plugin {
    
    
    /** Jmeno modulu. Jmeno urcene pro uzivatele*/
    public String getName();
    
    /**Vytvoreni instrukci pro generator
     @param plr Polozka Playlistu
     */
    public int[] getInstructions(AbstractPlayListItem plr);
    
    /**Vrati posledni chybovou zpravu
     *@return Zprava
     */
    public String getLastError();
    
    /**Inicializace zasuvneho modulu*/
    public void init();
    
    /**Vraci Panel pro editaci polozky*/
    public JPanel getItemPanel();
    
    /**Validace vstupu, obvykle je delegovana na JPanel, ktery se 
     * stara o editaci polozky. Vraci null, je-li vse OK, nebo
       Retezec s popisem chyby*/
    public String validateInput();
    
    /**Reset panelu pro editaci polozky*/
    public void resetPanel();
    
    /**Vytvoreni polozky playlistu z dat zadanych do panelu
     *@return Polozka playlistu
     */
    public AbstractPlayListItem createItem();
    
    /**Vyplneni panelu dle polozky*/
    public void fillPanel(AbstractPlayListItem plr);
        
    /**Nastavi poskytovatele jmen vstupniho a vystupniho souboru*/
    public void setInOutProvider(InOutProvider prov);

    /**Vrati seznam podporovanych turbo chunku v obrazech kazet*/
    public String[] getSupportedTapeImageChunks();

    /**Prida do proudu nastaveni instrukci pro dany chunk v obrazu kazety*/
    public void addInstructionsForChunk(InstructionStream is,TapeImageChunk chunk) throws Exception;

    /**Vrati pole prevodniku pro binarni soubory*/
    public BinaryConvertor[] getBinaryConvertors();

    /**Vrati  zemi puvodu*/
    public String getCountry();
    
    /** Determines if the plugin uses alternate file choosers*/
    public boolean isUsingAlternateFileChooser();
    
    
}
