package pilhaA;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

import dados.DataArea;
import fundamentos.ContainerEmptyException;
import fundamentos.ContainerFullException;

public class PilhaArray
{
    /* 
     * O campo br � uma inst�ncia da classe BufferedReader que usa
     * is da classe InputStreamReader como argumento para seu construtor.
     * Serve para simular o getch do C.
     */
    private static InputStreamReader is = new InputStreamReader( System.in );       
    private static BufferedReader br = new BufferedReader( is );
    
    final static int maxStack = 50;			// Limite da pilha.
    
    /*
     * Serve para informar as posi��es de in�cio e 
     * fim das substrings da linha lida no arquivo.
     */
    final static int inicioNumero 	= 2;
    final static int finalNumero 	= 4;
    
    final static int inicioNome 	= 5;
    final static int finalNome 		= 16;
    
    final static int inicioSalario 	= 17;
    /*
     *  O final da substring referente ao sal�rio, 
     * 	varia em fun�ao do fim da linha
     */
    
    public static void main(String[] args)
    {
        DataArea currArea;
        
        String linha;	// Capturar uma linha inteira do arquivo.        
        			 
        char transacao;
        String sNome = "";
        String sNumero = "0";
        String sSalario = "0";
        
        int offset = 0;
                
        try
        {
            StackAsArray s = new StackAsArray(maxStack);
                           // Inicializa a pila. 
            
            /* 
             * Seleciona o stream de entrada. 
             * Foi escolhida uma stream que possibilitasse a leitura de linha em linha.
             */
            BufferedReader in = new BufferedReader(
                    new InputStreamReader(
                            new FileInputStream (
                                    new File("..\\" +
                                            "dados\\ARQ9502.DAT"))));
                                    
            while (in.ready())            
            {   
                linha = in.readLine();
                    // Ler uma linha do texto (arquivo) de entrada.
                
                transacao = linha.charAt(0); 
                    //Obter o caractere da transa��o.                

                /*  
                 *  Processamento da transa��o contida na linha lida
                 *  Tratamento dos dados que se quer inserir.
                 */   
                if(transacao == 'i') 
                {   
                    currArea = new DataArea(0, null, 0f);
                    
                    sNumero		= 	linha.substring(
                            inicioNumero, finalNumero);
                    
                    sNome 		= 	linha.substring(
                            inicioNome, finalNome);
                    
                    sSalario 	= 	linha.substring(
                            inicioSalario);
                    
                    currArea.setNumero(Integer.decode(sNumero).intValue());
                    currArea.setNome(sNome);
                    currArea.setSalario(Float.parseFloat(sSalario));
                    
                    System.out.println("\tTransa��o: " + transacao);
                    
                    try
                    {
                        s.push(currArea);
                        
                        System.out.print("Registro incluido-> ");
                        System.out.print(currArea);
                    }
                    catch (ContainerFullException e)
                    {
                        System.out.println(e.getMotivo());
                    }
                    
                }// Fim do if(transacao == 'i')
                else if (transacao == 'e') 
                {
                    System.out.println("\tTransa��o: " + transacao);
                    
                    try
                    {
                        currArea = (DataArea) s.pop();
                        
                        System.out.print("Registro excluido-> ");
                        System.out.print(currArea);
                    }
                    catch (ContainerEmptyException e)
                    {
                        System.out.println(e.getMotivo());
                    }
                    
                }// Fim do else if (transacao == 'e')
                
                else if(transacao != 'f')
                    System.out.println(
                            "transacao diferente de 'i', 'e' ou 'f'");
                
                br.readLine(); 		
                       	// Simula��o do getch do C.
                
            }// Fim do else if(transacao != 'f')
            
            in.close();	   // Fechamento do stream (arquivo).
            
            System.out.print(s); // Imprimir o estado final da Pilha.
            
            br.readLine(); 		// Simula��o do getch do C.
            
        }// Fim do while (in.ready())
        
        catch (IOException e)
        {
            System.out.println("Arquivo n�o encontrado!");
        }        
    }
}