package src;

import java.text.DecimalFormat;
import java.text.ParseException;
import java.util.Calendar;
import java.util.Date;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;


// <editor-fold defaultstate="collapsed" desc=" UML Marker ">
// #[regen=yes,id=DCE.17B3335E-DF84-A4AC-2449-914CE8627F35]
// </editor-fold>
public class PrestamoHipotecario extends Cuentas
{
    private Date fecha_fin;
    private float interes=(float) 0.03;
    private float importe;
    private boolean aval;

    public PrestamoHipotecario ()
    {
    }

    public Date getFecha_fin () {
        return fecha_fin;
    }
    public void setFecha_fin (Date Fecha_fin) {
        this.fecha_fin = Fecha_fin;
    }
    public float getInteres () {
        return interes;
    }
    public void setInteres (float interes) {
        this.interes = interes;
    }
    //METODO QUE CREA EL PRESATMO HIPOTECARIO
     public void CreaCuentaPrestamoH(Sucursal suc,String dni,String nombre,String apellidos,String cuenta, int tc,String duracion,String importe,boolean aval) throws ParseException
    {
        PrestamoHipotecario p1=new PrestamoHipotecario();
        ClienteFisico cliF=new ClienteFisico();
        ClienteFisico cliFpersist=new ClienteFisico();
        ClienteJuridico cliJ=new ClienteJuridico();
        ClienteJuridico cliJpersit=new ClienteJuridico();
        DecimalFormat df1=new DecimalFormat();
        DecimalFormat df2=new DecimalFormat();
        float importe2;
        int meses;
        Calendar calendar = Calendar.getInstance();

      if(suc.devuelveDni(dni)==null) //Si es igual null es que no existe el cliente
      {
        int tipoCliente=2;
        String extraer=(dni.substring(0, 1));

        if((extraer.compareTo("0")==0) || (extraer.compareTo("1")==0) || (extraer.compareTo("2")==0) || (extraer.compareTo("3")==0) || (extraer.compareTo("4")==0) ||(extraer.compareTo("5")==0) || (extraer.compareTo("6")==0) || (extraer.compareTo("7")==0) || (extraer.compareTo("8")==0) || (extraer.compareTo("9")==0))
        {
             tipoCliente=1;
             cliFpersist=cliF.CreaClienteF(suc,dni, nombre, apellidos, cuenta, tipoCliente);
             persist(cliFpersist);
       }
       if(tipoCliente==2)
       {
            cliJpersit=cliJ.CreaClienteJ(suc,dni, nombre, apellidos, cuenta, tipoCliente);
            persist(cliJpersit);
       }
      }
        p1.setnumero_cuenta(cuenta);
        p1.setNombre_cliente(nombre+" "+apellidos);
        p1.setSaldo_cuenta(300);
        p1.setId_cliente(dni);
        Number n1=df1.parse(duracion);
        meses=n1.intValue();
        Date fecha=new Date();
        p1.setFecha(fecha);
        calendar.setTime(fecha);
        calendar.add(Calendar.MONTH,meses); //para sumar los meses de duracion del prestamo
        fecha_fin= calendar.getTime();
        p1.setFecha_fin(fecha_fin);
        p1.settipoCuenta(tc);
        Number n=df1.parse(importe);
        importe2=n.floatValue();
        importe2=importe2+(importe2*interes);
        p1.setImporte(importe2);
        p1.setInteres(interes);
        p1.setAval(aval);
        
        suc.insertaCuenta(p1);//SE AÑADE EN EL ARRAYLIST DE CLIENTES
        this.persist(p1);//GUARDAMOS LA CUENTA DE ESE CLIENTE
    }
     
    public float getImporte() {
        return importe;
    }
    public void setImporte(float importe) {
        this.importe = importe;
    }
    public boolean isAval() {
        return aval;
    }
    public void setAval(boolean aval) {
        this.aval = aval;
    }

    public void persist(Object object) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("bancocolombinoPU");
        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();
        try {
            em.persist(object);
            em.getTransaction().commit();
        } catch (Exception e) {
            e.printStackTrace();
            em.getTransaction().rollback();
        } finally {
            em.close();
        }
    }
}
