package danielcortes.xyz.data;

import danielcortes.xyz.models.caja.CajaDAO;
import danielcortes.xyz.models.caja.SQLiteCajaDAO;
import danielcortes.xyz.models.calculo_fondo.CalculoFondoDAO;
import danielcortes.xyz.models.calculo_fondo.SQLiteCalculoFondoDAO;
import danielcortes.xyz.models.detalle.DetalleDAO;
import danielcortes.xyz.models.detalle.SQLiteDetalleDAO;
import danielcortes.xyz.models.documentos.DocumentosDAO;
import danielcortes.xyz.models.documentos.SQLiteDocumentosDAO;
import danielcortes.xyz.models.efectivo.EfectivoDAO;
import danielcortes.xyz.models.efectivo.SQLiteEfectivoDAO;
import danielcortes.xyz.models.egreso.EgresoDAO;
import danielcortes.xyz.models.egreso.SQLiteEgresoDAO;
import danielcortes.xyz.models.estado_resultado.EstadoResultadoDAO;
import danielcortes.xyz.models.estado_resultado.SQLiteEstadoResultadoDAO;
import danielcortes.xyz.models.ingreso.IngresoDAO;
import danielcortes.xyz.models.ingreso.SQLiteIngresoDAO;
import danielcortes.xyz.models.tipo_detalle.SQLiteTipoDetalleDAO;
import danielcortes.xyz.models.tipo_detalle.TipoDetalleDAO;
import danielcortes.xyz.models.tipo_egreso.SQLiteTipoEgresoDAO;
import danielcortes.xyz.models.tipo_egreso.TipoEgresoDAO;
import danielcortes.xyz.models.tipo_ingreso.SQLiteTipoIngresoDAO;
import danielcortes.xyz.models.tipo_ingreso.TipoIngresoDAO;
import danielcortes.xyz.models.version.SQLiteVersionDAO;
import danielcortes.xyz.models.version.VersionDAO;

public class DAOManager {

  private static CajaDAO cajaDAO;
  private static CalculoFondoDAO calculoFondoDAO;
  private static DocumentosDAO documentosDAO;
  private static EfectivoDAO efectivoDAO;
  private static EgresoDAO egresoDAO;
  private static IngresoDAO ingresoDAO;
  private static DetalleDAO detalleDAO;
  private static TipoEgresoDAO tipoEgresoDAO;
  private static TipoIngresoDAO tipoIngresoDAO;
  private static TipoDetalleDAO tipoDetalleDAO;
  private static EstadoResultadoDAO estadoResultadoDAO;
  private static VersionDAO versionDAO;

  public static void setup() {
    cajaDAO = new SQLiteCajaDAO();
    calculoFondoDAO = new SQLiteCalculoFondoDAO();
    documentosDAO = new SQLiteDocumentosDAO();
    efectivoDAO = new SQLiteEfectivoDAO();
    egresoDAO = new SQLiteEgresoDAO();
    ingresoDAO = new SQLiteIngresoDAO();
    detalleDAO = new SQLiteDetalleDAO();
    tipoEgresoDAO = new SQLiteTipoEgresoDAO();
    tipoIngresoDAO = new SQLiteTipoIngresoDAO();
    tipoDetalleDAO = new SQLiteTipoDetalleDAO();
    estadoResultadoDAO = new SQLiteEstadoResultadoDAO();
    versionDAO = new SQLiteVersionDAO();
  }

  public static void setup(ConnectionHolder connectionHolder){
    cajaDAO = new SQLiteCajaDAO(connectionHolder);
    calculoFondoDAO = new SQLiteCalculoFondoDAO(connectionHolder);
    documentosDAO = new SQLiteDocumentosDAO(connectionHolder);
    efectivoDAO = new SQLiteEfectivoDAO(connectionHolder);
    egresoDAO = new SQLiteEgresoDAO(connectionHolder);
    ingresoDAO = new SQLiteIngresoDAO(connectionHolder);
    detalleDAO = new SQLiteDetalleDAO(connectionHolder);
    tipoEgresoDAO = new SQLiteTipoEgresoDAO(connectionHolder);
    tipoIngresoDAO = new SQLiteTipoIngresoDAO(connectionHolder);
    tipoDetalleDAO = new SQLiteTipoDetalleDAO(connectionHolder);
    estadoResultadoDAO = new SQLiteEstadoResultadoDAO(connectionHolder);
    versionDAO = new SQLiteVersionDAO(connectionHolder);
  }

  public static CajaDAO getCajaDAO() {
    return cajaDAO;
  }

  public static CalculoFondoDAO getCalculoFondoDAO() {
    return calculoFondoDAO;
  }

  public static DocumentosDAO getDocumentosDAO() {
    return documentosDAO;
  }

  public static EfectivoDAO getEfectivoDAO() {
    return efectivoDAO;
  }

  public static EgresoDAO getEgresoDAO() {
    return egresoDAO;
  }

  public static IngresoDAO getIngresoDAO() {
    return ingresoDAO;
  }

  public static DetalleDAO getDetalleDAO() {
    return detalleDAO;
  }

  public static TipoEgresoDAO getTipoEgresoDAO() {
    return tipoEgresoDAO;
  }

  public static TipoIngresoDAO getTipoIngresoDAO() {
    return tipoIngresoDAO;
  }

  public static TipoDetalleDAO getTipoDetalleDAO() {
    return tipoDetalleDAO;
  }

  public static EstadoResultadoDAO getEstadoResultadoDAO() {
    return estadoResultadoDAO;
  }

  public static VersionDAO getVersionDAO() {
    return versionDAO;
  }
}
