/*
 * Copyright (c) 1997-1999 Departamento de Informática - UFPE
 */

/**
 * Esta classe simula uma sessão num ambiente unix.
 *
 *
 * Obs: A documentacao para os metodos ainda nao vistos em sala
 *      pode ser encontrada em: 
 *      http://www.javasoft.com/products/jdk/1.2/docs/api/index.html
 */
public class Sessao {

    /**
     * O método principal, que realiza a simulação.
     */
    public static void main(String argv[]){
        Usuario user1;
        Usuario user2;
        Usuario user3;
        Usuario user;
        Arquivo arq1;
        Arquivo arq2;
        Diretorio corrente;
        Diretorio subdir;
        byte[] bytes = new byte[30];
        String entrada;
        String entrada2;

        user1 = new Usuario("csff","Carlos Figueira Filho",0);
        user2 = new Usuario("scbs","Sergio Soares",0);
        user3 = new Usuario("phmb","Paulo Borba",0);

        System.out.print("login: ");
        System.out.flush();                         //Semelhante a C, limpa o stream out.

        //Clausula para tratamento de uma possivel excecao
        //levantada pelo metodo read
        try{                                                 
            System.in.read(bytes);                  //Metodo que le o conteudo do stream in e
                                                    //atribui o valor lido a variavel bytes.
        } catch(Exception e){                       //Tratamento da excecao.
            System.out.println("Erro na entrada.");
        }

        entrada = new String(bytes);                //Instanciacao de uma nova string a partir
                                                    //do valor lido do stream in.
        entrada2 = entrada.trim();                  //trim() retira espacos em branco no 
                                                    //comeco e fim da string.

        if(entrada2.equals(user1.getLogin()))       //Equals é utilizado para comparacao 
            user = user1;                           //de objetos, no caso, String.  
        else
            if (entrada2.equals(user2.getLogin()))
                user = user2;
            else
                if (entrada2.equals(user3.getLogin())) 
                    user = user3;
                else {
                    System.out.println("Voce^ nao e' um usuario autorizado.\nAdeus...");
                    return;
                }

        System.out.print("senha: ");
        System.out.flush();

        try{
            System.in.read(bytes); 
        } catch(Exception e) {
            System.out.println("Erro na entrada de dados.");
        }

        entrada = new String(bytes);

        if (!user.verificarSenha(entrada.trim())) {
            System.out.println("Senha invalida.\nAdeusinho...");
        } else {
            System.out.println("Bem-vindo, "+user.getNome());
            corrente = user.getHome();   
            System.out.println("Diretorio corrente: "+corrente.getNome());

     /* Simulando alguns comandos... */
     
            arq1 = new Arquivo("Vodu1",user);
            arq2 = new Arquivo("Vodu2",user);

            System.out.println("\ncriando arquivos Vodu1 e Vodu2");
            corrente.inserirArquivo(arq1); 
            corrente.inserirArquivo(arq2);

            System.out.println("\n"+corrente.getNome()+">ls");
            corrente.ls();  

            System.out.println("\n"+corrente.getNome()+">rm arq1");
            corrente.removerArquivo(arq1);
            System.out.println("\n"+corrente.getNome()+">ls");
            corrente.ls();

            System.out.println("\n"+corrente.getNome()+">mkdir sub1");
            subdir = new Diretorio("sub1");
            corrente.mkdir(subdir);

            System.out.println("\n"+corrente.getNome()+">ls");
            corrente.ls();
        }
    }
}
