package faaz_view;

//import javax.swing.UIManager;
import java.awt.Graphics;
//import java.awt.Graphics2D;
//import java.awt.geom.Point2D;
import java.awt.*;
import java.awt.event.*;
//import javax.swing.*;
import java.util.*;
import java.io.*;
import java.lang.Math;

//import faaz.Frame1;


public class faaz_view_2 {

	public static String FILE = //"g:\\grupos_de_pesquisa\\taac2\\PHRAP.frg.olp";
                              "PHRAP.frg.olp";
  //private String FILE;

  boolean packFrame = false;
  Frame1_2 frame;

  //Construct the application
  public faaz_view_2() { }

  public faaz_view_2(String arquivo) {

    this.FILE = arquivo;

  }

  public void loadFromConfig() throws Exception {

    BufferedReader br  = new BufferedReader(new FileReader(FILE));
    String line, region0, region1;
    int i = 0, limiteEsquerdo = 100000, limiteDireito = 0;
    boolean inRegion = false;

		while ((line = br.readLine()) != null) {

           	//retira os espacos em branco do fim e do inici da linha
            //System.out.println (line.toLowerCase());
            line.trim();

            //caso seja um comentario, volte para o laco
            if ( line.startsWith("#") ) continue;

            //quebra a linha em tokens
            StringTokenizer st = new StringTokenizer(line);

            //caso seja o consenso do phrap
            if (line.startsWith("*")) {

                //guarda a string que esta entre []
                String inicio = st.nextToken("**");
                this.frame.reg1Ini[i] = Integer.parseInt(inicio, 10);

                limiteEsquerdo = min (limiteEsquerdo, this.frame.reg1Ini[i]);
                limiteDireito = max (limiteDireito, this.frame.reg1Ini[i]);

                String fim = st.nextToken("**");
                this.frame.reg1Fim[i] = Integer.parseInt(fim, 10);
                limiteEsquerdo = min (limiteEsquerdo, this.frame.reg1Fim[i]);
                limiteDireito = max (limiteDireito, this.frame.reg1Fim[i]);
                System.out.println (inicio + " " + fim);

                // linha da 1a. regiao no cap
                line = br.readLine();
                //quebra a linha em tokens
                st = new StringTokenizer(line);
                //guarda a string que esta entre []
                inicio = st.nextToken("**");
                this.frame.regIni[i*2] = Integer.parseInt(inicio, 10);
                limiteEsquerdo = min (limiteEsquerdo, this.frame.regIni[i*2]);
                limiteDireito = max (limiteDireito, this.frame.regIni[i*2]);

                fim = st.nextToken("**");
                this.frame.regFim[i*2] = Integer.parseInt(fim, 10);
                limiteEsquerdo = min (limiteEsquerdo, this.frame.regFim[i*2]);
                limiteDireito = max (limiteDireito, this.frame.regFim[i*2]);
                // linha da 2a regiao no cap
                line = br.readLine();
                //quebra a linha em tokens
                st = new StringTokenizer(line);
                //guarda a string que esta entre []
                inicio = st.nextToken("**");
                this.frame.regIni[i*2 + 1] = Integer.parseInt(inicio, 10);
                limiteEsquerdo = min (limiteEsquerdo, this.frame.regIni[i*2+1]);
                limiteDireito = max (limiteDireito, this.frame.regIni[i*2+1]);
                fim = st.nextToken("**");
                this.frame.regFim[i*2 + 1] = Integer.parseInt(fim, 10);
                limiteEsquerdo = min (limiteEsquerdo, this.frame.regFim[i*2+1]);
                limiteDireito = max (limiteDireito, this.frame.regFim[i*2+1]);
                i++;
                this.frame.numRegioes = i;
                continue;
            }//fim do if (line.startsWith("*"))

            //caso seja o consenso do CAP
            if (line.startsWith("&")) {

                //guarda a string que esta entre []
                String inicio = st.nextToken("&*");
                String fim = st.nextToken("**");
                System.out.println (inicio + " " + fim);

                continue;
            }//fim do if (line.startsWith("&"))

            continue;

        }//fim do while ((line = br.readLine()) != null)

        this.frame.xMin = limiteEsquerdo;
        this.frame.xMax = limiteDireito;

    }//fim do public void loadFromConfig()


  //Main method
  public static void main(String[] args) {

    faaz_view_2 faazX = new faaz_view_2();
    //if (args.length() > 0) {
    //    System.out.println(args[0]);
    //    faazX.FILE = args[0];
    //}

    // Carregando e configurando o arquivo
	  try {
        faazX.frame = new Frame1_2();
			  faazX.loadFromConfig();
	  }
    catch(Exception e) {
        System.out.println (e.getMessage());
    }//fim do try/catch(Exception e)

    //Validate frames that have preset sizes
    //Pack frames that have useful preferred size info, e.g. from their layout
    if (faazX.packFrame)
      faazX.frame.pack();
    else
      faazX.frame.validate();

//    faazX.frame.update();
    faazX.frame.repaint();
    faazX.frame.setVisible(true);
  }

  public int max (int num1, int num2) {
      if (num1 > num2) {
          return num1;
      } else {
          return num2;
      }
  }

  public int min (int num1, int num2) {
      if (num1 < num2) {
          return num1;
      } else {
          return num2;
      }
  }

}
