package pe.siso.horario.MySqlDAO;

//import io.github.cdimascio.dotenv.Dotenv;
import io.github.arniu.dotenv.Dotenv;
import java.sql.Connection;
import java.sql.DriverManager;
import pe.siso.horario.DAO.AreaDAO;
import pe.siso.horario.DAO.AreaDocenteDAO;
import pe.siso.horario.DAO.AulaDAO;
import pe.siso.horario.DAO.BloqueDAO;
import pe.siso.horario.DAO.BloqueInicialPrimariaDAO;
import pe.siso.horario.DAO.CategoriaDAO;
import pe.siso.horario.DAO.CentroDAO;
import pe.siso.horario.DAO.ClaseDAO;
import pe.siso.horario.DAO.CursoDAO;
import pe.siso.horario.DAO.DAOFactory;
import pe.siso.horario.DAO.DisponibilidadDocenteDAO;
import pe.siso.horario.DAO.DocenteDAO;
import pe.siso.horario.DAO.GradoDAO;
import pe.siso.horario.DAO.HorarioDAO;
import pe.siso.horario.DAO.MeritoDAO;
import pe.siso.horario.DAO.ModuloDAO;
import pe.siso.horario.DAO.NivelDAO;
import pe.siso.horario.DAO.PeriodoAcademicoDAO;
import pe.siso.horario.DAO.PlanAcademicoDAO;
import pe.siso.horario.DAO.PlanaDAO;
import pe.siso.horario.DAO.PlanaDocenteDAO;
import pe.siso.horario.DAO.ReporteEncuestaDAO;
import pe.siso.horario.DAO.SeccionDAO;
import pe.siso.horario.DAO.SedeDAO;
import pe.siso.horario.DAO.TipoCentroDAO;
import pe.siso.horario.DAO.TipoGradoDAO;
import pe.siso.horario.DAO.TurnoDAO;
import pe.siso.horario.DAO.UbigeoDocenteDAO;
import pe.siso.horario.DAO.UsuarioDAO;
import pe.siso.horario.DAO.UsuarioDocenteDAO;
import pe.siso.horario.DAO.ZonaDAO;
import pe.siso.horario.DAO.ZonaDistritoDAO;
import pe.siso.horario.DAO.ZonaSedeDAO;
import pe.siso.horario.utilities.OsUtils;

public class MySqlDAOFactory extends DAOFactory {

	static {
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

//	public static void main(String[] args) throws SQLException {
//		System.out.println(MySqlDAOFactory.obtenerConexion("horario"));
//	}
	public static Connection obtenerConexion(String base) {
		Connection conexion = null;
		String path = OsUtils.getDotEnvPath("horario") + "/.env";
		Dotenv dotenv = null;
		try {
			dotenv = Dotenv
				.configure()
				.path(path)
				.encoding("utf-8")
				.debug(false)
				.load();
		} catch (Exception e) {
			System.out.println("ERROR AL OBTENER EL ARCHIVO DOTENV --->> " + e.getMessage());
		}

//		System.out.println("PAATH =>> " + path);

		String host = dotenv.get("MYSQL_HOST_SERVIDOR_HORARIO");
		String port = dotenv.get("MYSQL_PORT_SERVIDOR_HORARIO");
		String user = dotenv.get("MYSQL_USER_SERVIDOR_HORARIO");
		String password = dotenv.get("MYSQL_PASSWORD_SERVIDOR_HORARIO");

		if (base.equals("encuentas") || base.equals("nuevo") || base.equals("horario") || base.equals("sacoolive3")) {
			if (base.equals("horario")) {
				base = "horarios_docente";
			} else if (base.equals("encuentas")) {
				base = "encuesta_docente";
			}
			try {
				conexion = DriverManager.getConnection(
					"jdbc:mysql://" + host + ":" + port + "/" + base,
					user,
					password);

//Pruebas
//					"jdbc:mysql://serverprueba:3306/" + base,
//					"desarrollo",
//					"5VC02019");
//					                        Producción
//					"jdbc:mysql://172.16.2.68:3306/" + base,
//					"sis_horarios",
//					"Sy356ho899");
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

		return conexion;
	}

	@Override
	public UsuarioDAO getUsuarioDAO() {
		return new MySqlUsuarioDAO();
	}

	@Override
	public ModuloDAO getModuloDAO() {
		return new MySqlModuloDAO();
	}

	@Override
	public CategoriaDAO getCategoriaDAO() {
		return new MySqlCategoriaDAO();
	}

	@Override
	public AulaDAO getAulaDAO() {
		return new MySqlAulaDAO();
	}

	@Override
	public TipoCentroDAO getTipoCentroDAO() {
		return new MySqlTipoCentroDAO();
	}

	@Override
	public CentroDAO getCentroDAO() {
		return new MySqlCentroDAO();
	}

	@Override
	public NivelDAO getNivelDAO() {
		return new MySqlNivelDAO();
	}

	@Override
	public TipoGradoDAO getTipoGradoDAO() {
		return new MySqlTipoGradoDAO();
	}

	@Override
	public GradoDAO getGradoDAO() {
		return new MySqlGradoDAO();
	}

	@Override
	public SeccionDAO getSeccionDAO() {
		return new MySqlSeccionDAO();
	}

	@Override
	public SedeDAO getSedeDAO() {
		return new MySqlSedeDAO();
	}

	@Override
	public TurnoDAO getTurnoDAO() {
		return new MySqlTurnoDAO();
	}

	@Override
	public AreaDAO getAreaDAO() {
		return new MySqlAreaDAO();

	}

	@Override
	public PlanaDAO getPlanaDAO() {
		return new MySqlPlanaDAO();
	}

	@Override
	public CursoDAO getCursoDAO() {
		return new MySqlCursoDAO();
	}

	@Override
	public DocenteDAO getDocenteDAO() {
		return new MySqlDocenteDAO();
	}

	@Override
	public BloqueDAO getBloqueDAO() {
		return new MySqlBloqueDAO();
	}

	@Override
	public AreaDocenteDAO getAreaDocenteDAO() {
		return new MySqlAreaDocenteDAO();
	}

	@Override
	public HorarioDAO getHorarioDAO() {
		return new MySqlHorarioDAO();
	}

	@Override
	public DisponibilidadDocenteDAO getDisponibilidadDAO() {
		return new MySqlDisponibilidadDAO();
	}

	@Override
	public BloqueInicialPrimariaDAO getBloqueInicialPrimariaDAO() {
		return new MySqlBloquePriIniDAO();
	}

	@Override
	public UsuarioDocenteDAO getUsuarioDocenteDAO() {
		return new MySqlUsuarioDocenteDAO();
	}

	@Override
	public UbigeoDocenteDAO getUbigeoDocenteDAO() {
		return new MySqlUbigeoDocenteDAO();
	}

	@Override
	public PeriodoAcademicoDAO getPeriodoAcademicoDAO() {
		return new MySqlPeriodoAcademicoDAO();
	}

	@Override
	public ClaseDAO getClaseDAO() {
		return new MySqlClaseDAO();
	}

	@Override
	public ReporteEncuestaDAO getReporteEncuestaDAO() {
		return new MySqlReporteEncuestaDAO();
	}

	@Override
	public ZonaDAO getZonaDAO() {
		return new MysqlZonaDAO();
	}

	@Override
	public ZonaSedeDAO getZonaSedeDAO() {
		return new MySqlZonaSedeDAO();
	}

	@Override
	public ZonaDistritoDAO getZonaDistritoDAO() {
		return new MySqlZonaDistritoDAO();
	}

	@Override
	public MeritoDAO getMeritoDAO() {
		return new MySqlMeritoDAO();
	}

	@Override
	public PlanaDocenteDAO getPlanaDocenteDAO() {
		return new MySqlPlanaDocenteDAO();
	}

	@Override
	public PlanAcademicoDAO getPlanAcademicoDAO() {
		return new MySqlPlanAcademicoDAO();
	}

}
