
package presentacion;

import encapsuladores.Entrenador;
import encapsuladores.Gerente;
import encapsuladores.Persona;
import excepciones.GenericaExcepcion;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import negocio.Personas;

public class Menu {
            
        List<Persona> listaPersonas = new ArrayList();
        Persona personaAutenticada = null;
         
    public void ejecutarMenu()
    {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        
        Persona gerente = new Gerente();   // Es necesario que una persona con perfil de Gerente esté registrado previamente
        gerente.setDni("12345");
        gerente.setPassword("12345");
        gerente.setNombre("Luis Gimeno");
        listaPersonas.add(gerente);
       
        byte opcion = 0;
        
        do {                   
           try {
                System.out.println("--------------------------------------------------------------------------------");               
                if (personaAutenticada != null) {
                    System.out.println("Está Vd. conectado como:");
                    System.out.print("Usuario : ");
                    System.out.print(personaAutenticada.getNombre()+"     Perfil : ");
                    if (personaAutenticada instanceof Gerente)
                        System.out.println("gerente");
                    else
                        if (personaAutenticada instanceof Entrenador)
                            System.out.println("entrenador");   
                        else
                            System.out.println("deportista");
                    
                }
                System.out.println("--------------------------------------------------------------------------------");   
                if (personaAutenticada == null)
                    System.out.println("1.- Logarse");
                else {                   
                    System.out.println("1.- Desconectar");
                    System.out.println("2.- Introducir persona");
                    System.out.println("3.- Visualizar personas a su cargo");
                }
                System.out.println("4.- Finalizar");
                System.out.println("--------------------------------------------------------------------------------");  
                System.out.print("Seleccione opción : ");
                opcion = (byte)Integer.parseInt(bufferedReader.readLine());    
                
                switch(opcion){
                    case 1: if (personaAutenticada == null)
                                logarse();
                            else
                                desconectar();
                            break;
                    case 2: introducirPersona();
                            break;       
                    case 3: visualizarPersonas();
                            break;                               
                }                           
           } catch (GenericaExcepcion genericaExcepcion){
                 switch (genericaExcepcion.getCodigoError()){
                     case -50: System.out.println("Vd. no tiene privilegios para tener personas a su cargo");        
                               break;     
                     case -52: System.out.println("Usuario no existe");        
                               break;
                     case -53: System.out.println("Password incorrecto");        
                               break;                            
                 }           
           } 
             catch (Exception exception){
                 System.out.println(exception.getMessage());       
           }
        } while (opcion != 4);          
          
    }

    private void logarse() throws Exception { 
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        Persona persona = new Persona();
        System.out.println("Introducción de datos de autenticación a la aplicación");
        System.out.println("Hay que tener en cuenta, que al inicio de ejecutar la aplicación, solamente existe el gerente, con");
        System.out.println("dni:      12345");
        System.out.println("password: 12345");
        System.out.print("Introduzca dni : ");
        persona.setDni(bufferedReader.readLine());  
        System.out.print("Introduzca password : ");
        persona.setPassword(bufferedReader.readLine());        
        persona.setResponsable(personaAutenticada);
        personaAutenticada = new Personas().autenticar(listaPersonas, persona);        
    }
 
    private void desconectar() { 
        personaAutenticada = null;
    }
    
    private void introducirPersona() throws Exception { 
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        Persona persona = new Persona();
        System.out.println("Introducción de datos de nueva persona a su cargo");
        System.out.print("Introduzca dni : ");
        persona.setDni(bufferedReader.readLine());  
        System.out.print("Introduzca password : ");
        persona.setPassword(bufferedReader.readLine()); 
        System.out.print("Introduzca nombre : ");
        persona.setNombre(bufferedReader.readLine());  
        persona.setResponsable(personaAutenticada);
        new Personas().introducir(listaPersonas, persona);
    }

    private void visualizarPersonas() throws GenericaExcepcion { 
        List<Persona> listaPersonasACargo = new Personas().visualizarPersonas(listaPersonas, personaAutenticada);
        
        System.out.println("PERSONAS A CARGO DE: "+personaAutenticada.getNombre());
        Persona persona;
        for (int i=0; i<listaPersonasACargo.size(); i++) {
            persona = listaPersonasACargo.get(i);
            System.out.println("dni: "+persona.getDni()+"      nombre: "+persona.getNombre());
            }           
    }    
}
