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

package Hito4;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

/**
 *
 * @author Ro
 */
public class ControladorBD {
    
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("BancoAlromaPU");//crea un entityManagerFactory(elemento de creacion de otros elementos)hay que darle la conexion, la unidad de persistencia
 
    public  ControladorBD() {
    }

    private static Collection<Cliente> carga_datos(){

        ArrayList<Producto> AP=new ArrayList<Producto>();
        Collection<Cliente> AC=new ArrayList<Cliente>();
        Producto p1=new CuentaCorriente();
        p1.setNumeroProducto("20984002161000015263");
        p1.setTipoProducto("c");

        Cliente c1=new Cliente();
        c1.setNombreCliente("Julian Martinez Morillas");
        c1.setDocumentacion("24784598J");
        c1.insertaProductoenCliente(p1);
        p1.insertaTitularenProducto(c1);

        AP.add(p1);
        AC.add(c1);

        Producto p2=new CuentaCorriente();
        p2.setNumeroProducto("20984002181000015264");
        p2.setTipoProducto("c");

        Cliente c2=new Cliente();
        c2.setNombreCliente("Javier Alvarez Cejudo");
        c2.setDocumentacion("22548544P");
        c2.insertaProductoenCliente(p2);
        p2.insertaTitularenProducto(c2);


        AP.add(p2);
        AC.add(c2);

        Producto p3=new CuentaCorriente();
        p3.setNumeroProducto("20984002141000015265");
        p3.setTipoProducto("c");

        Cliente c3=new Cliente();
        c3.setNombreCliente("Martin Rivas Nistal");
        c3.setDocumentacion("18745354H");
        c3.insertaProductoenCliente(p3);
        p3.insertaTitularenProducto(c3);

        AP.add(p3);
        AC.add(c3);

        Producto p4=new CuentaCorriente();
        p4.setNumeroProducto("20984002131000015266");
        p4.setTipoProducto("c");

        Cliente c4=new Cliente();
        c4.setNombreCliente("Alicia Rivas Cano");
        c4.setDocumentacion("54252622T");
        c4.insertaProductoenCliente(p4);
        p4.insertaTitularenProducto(c4);

        AP.add(p4);
        AC.add(c4);
/*
        Producto p5=new CuentaCorriente();
        p5.setNumeroProducto("20984002151000015267");
        p5.setTipoProducto("c");

        Cliente c5=new Cliente();
        c5.setNombreCliente("Julia Morente Castro");
        c4.setDocumentacion("18745353H");
        c4.insertaProductoenCliente(p4);
        p4.insertaTitularenProducto(c4);
        AP.add(p5);
        
        Producto p6=new CuentaCorriente();
        p6.setNumeroProducto("20984002181000015268");

        //p6.setNombreCliente("Antonio Recio Odon");
        AP.add(p6);

        Producto p7=new CuentaCorriente();
        p7.setNumeroProducto("20984002191000015269");
        //p7.setNombreCliente("Luisa Fernandez Ruiz");
        AP.add(p7);

        Producto p8=new CuentaCorriente();
        p8.setNumeroProducto("20984002141000015270");
        //p8.setNombreCliente("Antonio Martin Ares");
        AP.add(p8);

        Producto p9=new CuentaCorriente();
        p9.setNumeroProducto("20984002151000015271");
        //p9.setNombreCliente("Gabriel Mercado Condal");
        AP.add(p9);

        Producto p10=new CuentaCorriente();
        p10.setNumeroProducto("20984002181000015272");
        //p10.setNombreCliente("Pedro Villar Torres");
        AP.add(p10);

        Producto p11=new CuentaCorriente();
        p11.setNumeroProducto("20984002171000015273");
        //p11.setNombreCliente("Maria Castilla Ramos");
        AP.add(p11);

        Producto p12=new CuentaCorriente();
        p12.setNumeroProducto("20984002131000015274");
        //p12.setNombreCliente("Isabel Torres Ruiz");
        AP.add(p12);

        Producto p13=new CuentaCorriente();
        p13.setNumeroProducto("20984002181000015275");
        //p13.setNombreCliente("Ana Castro Cano");
        AP.add(p13);

        Producto p14=new CuentaCorriente();
        p14.setNumeroProducto("20984002171000015276");
        //p14.setNombreCliente("Luis Canseco Roldan");
        AP.add(p14);

        Producto p15=new CuentaCorriente();
        p15.setNumeroProducto("20984002181000015277");
        //p15.setNombreCliente("Olivia Martinez Fernandez");
        AP.add(p15);

        Producto p16=new CuentaCorriente();
        p16.setNumeroProducto("20981001242000024145");
        //p16.setNombreCliente("Universidad de Huelva");
        AP.add(p16);

        Producto p17=new CuentaCorriente();
        p17.setNumeroProducto("20981003821540005128");
        //p17.setNombreCliente("TELEFONICA DE ESPANA, S.A.U.");
        AP.add(p17);

        Producto p18=new CuentaCorriente();
        p18.setNumeroProducto("20980002210007125226");
        //p18.setNombreCliente("Telefónica Moviles");
        AP.add(p18);

        Producto p19=new CuentaCorriente();
        p19.setNumeroProducto("20980002260000564814");
        //p19.setNombreCliente("Canal Satelite Digital, SL");
        AP.add(p19);

        Producto p20=new CuentaCorriente();
        p20.setNumeroProducto("20980003410000425188");
        //p20.setNombreCliente("ENDESA ENERGIA XXI, S.L.");
        AP.add(p20);

        Producto p21=new CuentaCorriente();
        p21.setNumeroProducto("20980005620000954125");
        //p21.setNombreCliente("El Corte Inglés");
        AP.add(p21);
*/
        return AC;
}
    /*private static List<Caja> carga_datos3(){
        ArrayList<Caja> C=new ArrayList<Caja>();
        //Identificamos caja1 como la Caja Fuerte Central
        
        Caja caja1=new Caja();
        caja1.setIdentificador(1);
        caja1.setUsuario("Director");
        caja1.setSaldoInicial(100);

        C.add(caja1);

        Caja caja2=new Caja();
        caja2.setIdentificador(2);
        caja2.setUsuario("Rocio");
        caja2.setSaldoFinal(100);

        C.add(caja2);
        return C;
    }

    private static List<Empleado> carga_datos2(){
        ArrayList<Empleado> E=new ArrayList<Empleado>();
        ArrayList<Caja> C=new ArrayList<Caja>();
        //Identificamos caja1 como la Caja Fuerte Central
        Empleado e1=new Empleado();
        e1.setUsuario("Director");
        e1.setContraseña("1234");
        e1.setPermiso(1);
        e1.setNumCaja(1);

        Caja caja1=new Caja();
        caja1.setIdentificador(1);
        caja1.setUsuario("Director");
        caja1.setSaldoInicial(100);
        e1.setCaja(caja1);
        caja1.setE(e1);

        E.add(e1);
        C.add(caja1);

        Empleado e2=new Empleado();
        Caja caja2=new Caja();
        caja2.setIdentificador(2);
        caja2.setUsuario("Rocio");
        caja2.setSaldoFinal(100);
        e2.setUsuario("Rocio");
        e2.setContraseña("1234");
        e2.setPermiso(0);
        e2.setNumCaja(2);
        e2.setCaja(caja2);
        caja2.setE(e2);
        E.add(e2);
        C.add(caja2);
        return E;
    }
*/
    private static Collection<Producto> carga_datos2(){

        Collection<Producto> AP=new ArrayList<Producto>();
        ArrayList<Cliente> AC=new ArrayList<Cliente>();
        Producto p1=new CuentaCorriente();
        p1.setNumeroProducto("20984002161000015263");
        p1.setTipoProducto("c");

        Cliente c1=new Cliente();
        c1.setNombreCliente("Julian Martinez Morillas");
        c1.setDocumentacion("24784598J");
        c1.insertaProductoenCliente(p1);
        p1.insertaTitularenProducto(c1);

        AP.add(p1);
        AC.add(c1);

        Producto p2=new CuentaCorriente();
        p2.setNumeroProducto("20984002181000015264");
        p2.setTipoProducto("c");

        Cliente c2=new Cliente();
        c2.setNombreCliente("Javier Alvarez Cejudo");
        c2.setDocumentacion("22548544P");
        c2.insertaProductoenCliente(p2);
        p2.insertaTitularenProducto(c2);


        AP.add(p2);
        AC.add(c2);

        Producto p3=new CuentaCorriente();
        p3.setNumeroProducto("20984002141000015265");
        p3.setTipoProducto("c");

        Cliente c3=new Cliente();
        c3.setNombreCliente("Martin Rivas Nistal");
        c3.setDocumentacion("18745354H");
        c3.insertaProductoenCliente(p3);
        p3.insertaTitularenProducto(c3);

        AP.add(p3);
        AC.add(c3);

        Producto p4=new CuentaCorriente();
        p4.setNumeroProducto("20984002131000015266");
        p4.setTipoProducto("c");

        Cliente c4=new Cliente();
        c4.setNombreCliente("Alicia Rivas Cano");
        c4.setDocumentacion("54252622T");
        c4.insertaProductoenCliente(p4);
        p4.insertaTitularenProducto(c4);

        AP.add(p4);
        AC.add(c4);
        return AP;
    }
    public void setUpDB() {//ejecuta el array list y se hacen persistentes, se guardan en la bd
         for(Cliente c: carga_datos()) {
            persist(c);
         }
         for(Producto p: carga_datos2()) {
            persist(p);
         }
    }

    public List getData() {
        return emf.createEntityManager().createQuery("SELECT c FROM Cliente c").getResultList();
    }

    public List getData2() {
        return emf.createEntityManager().createQuery("SELECT p FROM Producto p").getResultList();
    }
    public void persist(Object object) {//es un metodo para guardar cualquier objeto
        EntityManager em = emf.createEntityManager();//crea un gestor de entidades
        em.getTransaction().begin();
        try {
            em.persist(object);//intenta almacenar el objeto que le llega
            em.getTransaction().commit();
        } catch (Exception e) {
            e.printStackTrace();
            em.getTransaction().rollback();//devolvemos la bd a su estado anterior
        } finally {
            em.close();
        }
    }
}
