/** FILE: Testbuffer.java **/

import java.io.PrintStream;

/* CLASS Testbuffer
 *
 * classe di partenza, prende in input dei parametri e crea una interfaccia grafica
 * --> vedi interfaccia.java
 */
class Testbuffer
{
    /*
     * METODO man()
     * 
     * scrive sul terminale il manuale d'uso
     */
    static void man()
    {
        System.out.print("\nAPPLICAZIONE JAVA Testbuffer\t by Caponi, Convertino, Federici\n");
        System.out.print("\nSYNOPSIS\n\tjava Testbuffer [OPTION]...[POLITICA]...][SPECIAL]...\n");
        System.out.print("\nDESCRIPTION\n\tLancia una interfaccia grafica\n\tPer settare da ");
        System.out.print("tastiera i normali parametri vedere OPZIONI\n\tPer settare la politica ");
        System.out.print("vedere POLITICA\n\tPer i comandi speciali vedere SPECIAL\n");
        System.out.print("\nOPTION\n\t-f=\n\t\tFile dove prendere i messagi di input\n");
        System.out.print("\t-a=\n\t\tVelocità relativa tra mittenti(put) \n\t");
        System.out.print("\te destinatari(get) (valore float)\n");
        System.out.print("\t-b=\n\t\tTempo medio di interarrivo (millisecondi)\n");
        System.out.print("\t-h, -?, --help\n\t\tVisualizza questo help\n");
        System.out.print("\nPOLITICA\n\t-1, -anarchica:\tpolitica anarchica\n\t-2, -fifo:     \t");
        System.out.print("politica fifo\n\t-3, -personale:\tpolitica personalizzata\n");
        System.out.print("\nSPECIAL\n\t-NOGRAPHICS\n\t\tNon visualizza le finestre di riepilogo\n");
        System.out.print("\t-r=\n\t\tQuante volte ripetere la stessa simulazione\n\t\t(per ");
        System.out.print("valori maggiori di uno non vilualizza\n\t\tle finestre di riepilogo -NOGRAPHICS)\n");
    }

    /*
     * METODO main()
     * 
     * controlla l'input e imposta i parametri in input. Se sono stati inseriti male visualizza
     * il manuale altrimenti crea una finestra di interaccia --> vedi interfaccia.java 
     */
    public static void main(String args[])
    {
        boolean flag = true;
        for(int i = 0; i < args.length; i++)
            if(args[i].charAt(0) == '/' || args[i].charAt(0) == '-')
            {
                if(args[i].length() > 2 && (args[i].charAt(2) == ':' || args[i].charAt(2) == '='))
                {
                    String s = new String(args[i].toCharArray(), 3, args[i].length() - 3);
                    switch(args[i].charAt(1))
                    {
                    case 102: // 'f'     
                        file = s;
                        break;

                    case 97: // 'a'      
                        alpha = (new Float(s)).floatValue();
                        break;

                    case 98: // 'b'      
                        beta = Integer.parseInt(s);
                        break;

                    case 'r': //         
                        nograp = true;   
                        ripeti = Integer.parseInt(s);
                        break;

                    default:
                        man();
                        flag = false;
                        break;

                    }
                }
                else
                {
                    String s1 = new String(args[i].toCharArray(), 1, args[i].length() - 1);
                    if(s1.equalsIgnoreCase("1") || s1.equalsIgnoreCase("anarchica"))
                        politica = '1';
                    else
                    if(s1.equalsIgnoreCase("2") || s1.equalsIgnoreCase("fifo"))
                        politica = '2';
                    else
                    if(s1.equalsIgnoreCase("3") || s1.equalsIgnoreCase("personale"))
                        politica = '3';
                    else
                    if(s1.equalsIgnoreCase("NOGRAPHICS"))  // per non visualizzare le finestre di output
                    {
                        nograp = true;
                    }
                    else
                    {
                        man();
                        flag = false;
                    }
                }
            }
            else
            {
                man();
                flag = false;
            }

        if(flag)
            new interfaccia(alpha, beta, file, politica, nograp, ripeti);    // --> vedi interfaccia.java
    }

    /* 
     * variabili preimpostate
     *
     * questi valori compariranno di default sull'interfaccia se non vengono impostati
     */
    static float alpha = 1.5F;
    static int beta = 20;
    static String file = "prova.txt";
    static char politica = '1';
    static boolean nograp;
    static int ripeti = 1;

}