/*
 * Copyright (c) 1997-2001 Centro de Informática - UFPE
 */

/**
 * Esta classe simula uma sessão num ambiente unix.
 */
public class Sessao {

    /**
     * O m&eacute;todo principal, que realiza a simulação.
     */
    public static void main(String[] argv) {

        Usuario usuario1, usuario2, usuario3, usuario;
        Arquivo arquivo1, arquivo2, arquivo3;
        Diretorio corrente, subdir;
        byte[] bytes = new byte[30];
        String entrada, entrada2;

        usuario1 = new Usuario("csff", "Carlos Figueira Filho", 0);
        usuario2 = new Usuario("scbs", "Sergio Soares", 0);
        usuario3 = new Usuario("phmb", "Paulo Borba", 0);

        System.out.print("login: ");
        System.out.flush();

        // Lê o login do usuário.
        try {
            System.in.read(bytes);
        } catch(Exception e) {
            System.out.println("Erro na entrada.");
        }

        entrada = new String(bytes);
        // retira espaços em branco do início ou do final da String.
        entrada2 = entrada.trim();

        if (entrada2.equals(usuario1.getLogin()))
            usuario = usuario1;
        else {
            if (entrada2.equals(usuario2.getLogin()))
                usuario = usuario2;
            else {
                if (entrada2.equals(usuario3.getLogin()))
                    usuario = usuario3;
                else {
                    System.out.println("Voce^ nao e' um usuario autorizado.\n"
                                       + "Adeus...");
                    return; // não façam isto...
                }
            }
        }

        System.out.print("senha: ");
        System.out.flush();

        // Lê a senha do usuário.
        try {
            System.in.read(bytes);
        } catch(Exception e) {
            System.out.println("Erro na entrada de dados.");
        }

        entrada = new String(bytes);

        // Checa se a senha está correta.
        if (!usuario.verificarSenha(entrada.trim())) {
            System.out.println("Senha invalida.\nAdeusinho...");
        }
        else {
            System.out.println("Bem-vindo, " + usuario.getNome());
            corrente = usuario.getHome();
            System.out.println("Diretorio corrente: " + corrente.getNome());

            // Simulando alguns comandos...

            arquivo1 = new Arquivo("Vodu1", usuario, "Vodu1");
            arquivo2 = new Arquivo("Vodu2", usuario, "Vodu2");
            arquivo3 = new Arquivo("Vodu3", usuario, "Vodu3");

            System.out.println("\ncriando arquivos Vodu1 e Vodu2");
            corrente.inserirArquivo(arquivo1);
            corrente.inserirArquivo(arquivo2);

            System.out.println("\n" + corrente.getNome() + ">ls");
            System.out.print(corrente.ls());

            System.out.println("\n" + corrente.getNome() + ">rm arquivo1");
            corrente.removerArquivo(arquivo1);
            System.out.println("\n" + corrente.getNome() + ">ls");
            System.out.print(corrente.ls());

            System.out.println("\n" + corrente.getNome() + ">mkdir sub1");
            subdir = new Diretorio("sub1", usuario);
            corrente.mkdir(subdir);

            System.out.println("\n" + corrente.getNome() + ">cd sub1");
            System.out.println("\ncriando arquivo Vodu3");
            subdir.inserirArquivo(arquivo3);

            System.out.println("\n" + corrente.getNome() + "/" +
                               subdir.getNome() + ">ls");
            System.out.print(subdir.ls());

            System.out.println("\n" + corrente.getNome() + "/" +
                               subdir.getNome() + ">cd ..");

            System.out.println("\n" + corrente.getNome() + ">ls");
            System.out.print(corrente.ls());

            //System.out.println("\n" + corrente.getNome() + ">ls -R");
            //System.out.print(corrente.lsR());

        }
    }

}