/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Escuela;

import java.util.ArrayList;

/**
 * Clase que modela el objeto Escuela
 * @author felix
 */

public class Escuela {
    private String Nombre;
    private ArrayList <Alumno> Alumnos;
    private ArrayList <Profesor> Profesores;
    private ArrayList <Materia> Materias;
    
    /**
     * Constructor de la clase Escuela. Internamente lee las materias y
     * los alumnos inscritos en la misma.
     * @param unNombre 
     */
    
    public Escuela(String unNombre) {
        Nombre = unNombre;
        Alumnos = new ArrayList <Alumno> ();
        Profesores = new ArrayList <Profesor> ();
        Materias = new ArrayList <Materia> ();        
        Lee_Materias();
        Lee_Alumnos();
        Lee_Profesores();
    }
    
    /**
     * Este metodo permite agregar un alumnos al arreglo alumnos
     * @param unAlumno
     */
    
    public void Agrega_alumno(Alumno unAlumno) {
        Alumnos.add(unAlumno);
    } 
    
    /**
     * Metodo para agregar una materia nueva a la lista de materias
     * @param unaMateria
     */
    
    public void Agrega_Materia(Materia unaMateria) {
        Materias.add(unaMateria);
    } 
    /**
     * Agrego un profesor
     * @param unProfesor Los datos completos del profesor.
     */
    
    public void Agrega_Profesor(Profesor unProfesor) {
        Profesores.add(unProfesor);
    }
    
    /**
     * Lee todos los profesores de la Escuela
     */
    
    public void Lee_Profesores(){
        Profesor unProfe = new Profesor("Romario", "Ramirez", "Calderon",
                "Domicilio Conocido Morelia", new Fecha(12,12, 1912), "P23498dasd");
        int mat = this.existeMateria("m01");
        if(mat != -1) 
            unProfe.agrega_materia(Materias.get(mat));
        
        Agrega_Profesor(unProfe);

        unProfe = new Profesor("Honorio", "Ricon", "Lopez",
                "Domicilio la lomita", new Fecha(10,3, 1972), "Plcsdff");
        
        mat = this.existeMateria("m03");
        if(mat != -1) 
            unProfe.agrega_materia(Materias.get(mat));
        
        Agrega_Profesor(unProfe);
    
    }
    
    public String Busca_Profesor_por_Materia(String unaMateria) {

        for(Profesor x : Profesores ) {
            
            ArrayList <Materia> aux = x.obtenListaMateria();
            for(Materia m:aux) {
                if (unaMateria.equals(m.getdescripcion())){
                    return x.informacion();
                }
            }
        }
        
        return "Materia sin Profesor";
    }
    
    Curso Nuevo(String unaClave, int unaCalificacion, String unaSeccion) {
        int k;
        Materia aux;
        k = existeMateria(unaClave);
        
        if(k >=0) {
            aux = Materias.get(k);
            return new Curso(unaClave, aux.getdescripcion(), unaCalificacion, unaSeccion);
        }
        return null;     
    }
    
    int existeMateria(String unaClave){
        
        int k = 0;
        for(Materia i: Materias) {
           if(unaClave.equals(i.getClave())) return k;
           k++;
       }
        
       return -1;
    }
    
    /**
     * Imprime el nombre de un alumno se esta inscrito en unaMateria
     * @param unaMateria
     */
    
    public void Lista_Alumnos(String unaMateria) {
        
        int n=1;

        for (Alumno k: Alumnos) {
            
            if(k.cursa(unaMateria)) {
                System.out.print(n++ + ".- " + k.informacion());
            }
             
        }    
        System.out.println("");
    }
    
    void Lee_Materias() {
        Agrega_Materia(new Materia("m01", "Matematicas I", 5, 1));       
        Agrega_Materia(new Materia("m02", "Matematicas II", 5, 2));
        Agrega_Materia(new Materia("m03", "Fisica I", 4, 1));
        Agrega_Materia(new Materia("m04", "Fisica II", 4, 2));
        Agrega_Materia(new Materia("m05", "Quimica", 3, 1));
        Agrega_Materia(new Materia("m06", "Programaci√≥n de Computadoras", 3, 1));
        Agrega_Materia(new Materia("m07", "Algebra", 3, 1));
        Agrega_Materia(new Materia("m08", "Control", 3, 3));
        Agrega_Materia(new Materia("m09", "Circuitos", 3, 3));        
        Agrega_Materia(new Materia("m10", "Electronica I", 4, 3));        
        Agrega_Materia(new Materia("m11", "Diseño", 3, 1));        
        Agrega_Materia(new Materia("m12", "Métodos Numéricos", 3, 3));        
    }
    
    /**
     * Para cada una de las materias imprime los alumnos inscritos
     */
    
    public void Lista_Alumnos_por_Materia() {
        for(Materia i : Materias) {
            System.out.println("Profesor : " + Busca_Profesor_por_Materia(i.getdescripcion()));
            System.out.println(i.getdescripcion());
            Lista_Alumnos(i.getdescripcion());
        }
    }
 
    void Lista_Materias_por_Alumnos() {
        for(Alumno i : Alumnos) {
            System.out.println(i.informacion());
            System.out.println(i.cursos());
        }
    }
    
    void Lee_Alumnos() {
        Alumno aux = new Alumno("Juan", "Pérez", "López", 
                "Lazaro Cadernas 100", new Fecha(13, 03, 1990), "122kka");
        aux.agrega_Curso(Nuevo("m03", 10, "A"));
        aux.agrega_Curso(Nuevo("m05", 8, "A"));
        aux.agrega_Curso(Nuevo("m06", 7, "A"));
        aux.agrega_Curso(Nuevo("m12", 8, "A"));
        
        Agrega_alumno(aux);
        
        aux = new Alumno("Manuel", "Juárez", "Mena", 
                "Benito Juarez 134", new Fecha(14, 02, 1995), "8sdsdf8");
        aux.agrega_Curso(Nuevo("m03", 9, "A"));
        aux.agrega_Curso(Nuevo("m05", 8, "A"));
        aux.agrega_Curso(Nuevo("m06", 8, "A"));
        aux.agrega_Curso(Nuevo("m12", 8, "A"));
        aux.agrega_Curso(Nuevo("m07", 6, "A"));
        aux.agrega_Curso(Nuevo("m09", 10, "A"));
        aux.agrega_Curso(Nuevo("m01", 8, "A"));
       
        Agrega_alumno(aux);
        
        aux = new Alumno("Carla", "Medina", "Alvarez", 
                "Calle s/n s/n1", new Fecha(30, 8, 1994), "02392d");

        aux.agrega_Curso(Nuevo("m01", 10, "A"));
        aux.agrega_Curso(Nuevo("m05", 8, "A"));
        aux.agrega_Curso(Nuevo("m08", 7, "A"));
        aux.agrega_Curso(Nuevo("m10", 7, "A"));
        aux.agrega_Curso(Nuevo("m12", 8, "A"));
        
        Agrega_alumno(aux);
        
        aux = new Alumno("Maria Luisa", "Rico", "Gomez", 
                "Calle s/n s/n1", new Fecha(15, 11, 1994), "9234jja");
        
        aux.agrega_Curso(Nuevo("m11", 8, "A"));
        aux.agrega_Curso(Nuevo("m01", 8, "A"));
        
        Agrega_alumno(aux);        
        
        aux = new Alumno("Luis Manuel", "Arce", "Salas", 
                "Calle s/n s/n1", new Fecha(30, 12, 1994), "8234jf");
        
        aux.agrega_Curso(Nuevo("m03", 8, "A"));
        aux.agrega_Curso(Nuevo("m01", 9, "A"));
        aux.agrega_Curso(Nuevo("m07", 7, "A"));
        
        Agrega_alumno(aux);
    }
}
