package paqueteDAO;


import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 *
 * @author Administrador
 */
public class BaseDAO {

    //public Connection conex=null;

    static private Connection getNuevaConexion() throws Exception
    {
        Connection conConexion;
        Class.forName("com.mysql.jdbc.Driver").newInstance();
        conConexion = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/fvc", "fvc","fvc");
        //System.out.println("CREANDO conexion");
        return  conConexion;
    }
/*
    static public void closeConexion(Connection c) throws Exception
    {
        c.close();
    }


    public void closeConexion() throws Exception
    {
        System.out.println("cerrando conexion");
        conex.close();
    }

    public Statement getStatement() throws Exception
    {
        if (conex==null || !conex.isValid(0)) {conex=getConexion();System.out.println("creando nueva conexion");}
        return conex.createStatement();
    }
*/

    private static List<Connection> conexiones=null;
    private int numMaxConexiones=10;

    synchronized  public Connection getConexion() throws SQLException, Exception
    {
        if (conexiones==null)
            conexiones=new ArrayList<Connection>();
        else
            while (conexiones.size()>0)
            {
                Connection c=conexiones.get(0);
                conexiones.remove(0);
                if (c.isValid(0))
                {
                    //System.out.println("Reutilizando conexion");
                    return c;
                }
            }
        return getNuevaConexion();
    }

    synchronized  public void liberaConexion(Connection c) throws SQLException, Exception
    {
        //System.out.println("Liberando conexion");
        if (conexiones.size()<numMaxConexiones)
            conexiones.add(c);
        else
            c.close();
    }


  
    static public String getBDFecha(Date fecha)
    {
        if (fecha!=null)
        {
            SimpleDateFormat formato = new SimpleDateFormat("HH:mm yyyy-MM-dd");
            String cadenaFecha =formato.format(fecha);
            return cadenaFecha;
        }
        else
            return null;
    }

    static public String getBDHora(Date fecha)
    {
        if (fecha!=null)
        {
            SimpleDateFormat formato = new SimpleDateFormat("HH:mm");
            String cadenaFecha = formato.format(fecha);
            return cadenaFecha;
        }
        else
            return null;
    }

    static public String concatena(String cad,String s)
    {
        String token;
        if (cad!=null) token="'"+s+"'"; else token="";
        if (cad.equals("")) return token; else return cad+","+token;
    }

    static public String concatena(String cad,Integer numero)
    {
        String token=numero.toString();
        if (cad.equals("")) return token; else return cad+","+token;
    }

    static public String concatena(String cad,Date fecha)
    {
        String token;
        if (fecha!=null)
        {
            SimpleDateFormat formato = new SimpleDateFormat("yyyy-MM-dd HH:mm");
            String cadenaFecha = "'"+formato.format(fecha)+"'";
            token=cadenaFecha;
        }
        else
            token="null";
        if (cad.equals("")) return token; else return cad+","+token;
    }

    static public String sets(String cadena,String campo, String valor)
    {
        String t=campo+"='"+valor+"'";
        if (cadena.length()==0) return t; else return cadena+","+t;
    }

    static public void copy(File src, File dst) throws IOException {
        try{
        InputStream in = new FileInputStream(src);

        OutputStream out = new FileOutputStream(dst);

        byte[] buf = new byte[1024];
        int len;
        while ((len = in.read(buf)) > 0) {
            out.write(buf, 0, len);
        }
        in.close();
        out.close();
        }
        catch(Exception e)
        {
            System.out.println(e.toString());
        }
    }

    static public void copy(String origen, String destino) throws IOException {
        try{
            copy(new File(origen),new File(destino));
        }
        catch(Exception e)
        {
            System.out.println(e.toString());
        }
    }

    /**
     * @return the numMaxConexiones
     */
    public int getNumMaxConexiones() {
        return numMaxConexiones;
    }

    /**
     * @param numMaxConexiones the numMaxConexiones to set
     */
    public void setNumMaxConexiones(int numMaxConexiones) {
        this.numMaxConexiones = numMaxConexiones;
    }


    static public String getTxtTime(Date fecha)
    {
        SimpleDateFormat formato = new SimpleDateFormat("HH:mm dd/MM/yyyy");
        String cadenaFecha = formato.format(fecha);
        return cadenaFecha;
    }
    
    static public Date hora22(String fecha)  {
        try{
            SimpleDateFormat sdf= new SimpleDateFormat("HH:mm");
            java.util.Date d=sdf.parse(fecha);
            return d;
        }catch(Exception e){return null;}
    }

    public static String quitaNull(String s)
    {
        if (s==null || s.equals("null"))
        {
            return "";
        }
        else
            return s;
    }


}

