using System.Data;
using System.Data.SqlClient;
using System;
using System.Collections.Generic;

public class DBAssistent
{
	SqlConnection verbindung;

	SqlCommand sqlabfrage;

	BestellungenDB bestellungenDB;
	KuchenDB kuchenDB;
	SortenDB sortenDB;
	GaesteDB gaesteDB;
	EinrichtungenDB einrichtungenDB;

	void initVerbindung()
	{
		verbindung = new SqlConnection();
		//verbindung->ConnectionString = "Data Source=HRO-023-201;Initial Catalog=kuchenbasar;Integrated Security=True";
		//verbindung.ConnectionString = "Data Source=BERND-HP;Initial Catalog=kuchenbasarvc;Integrated Security=True";
		verbindung.ConnectionString = "Data Source=BERND-HP;Initial Catalog=kuchenbasarvcs;Integrated Security=True";
		verbindung.Open();

		sqlabfrage = new SqlCommand();
		sqlabfrage.Connection = verbindung;
	}

	public DBAssistent()
	{
		initVerbindung();

		bestellungenDB = new BestellungenDB(sqlabfrage);
		kuchenDB = new KuchenDB(sqlabfrage);
		sortenDB = new SortenDB(sqlabfrage);
		gaesteDB = new GaesteDB(sqlabfrage);
		einrichtungenDB = new EinrichtungenDB(sqlabfrage);
	}

	~DBAssistent()
	{
	}

    public void closeDataBase()
	{
		verbindung.Close();
	}

	//BestellungenDB
	public DataTable getBestellungenTabelle()
	{
		return bestellungenDB.getTable();
	}

    public DataTable getBestellungenTabelle(String suchstring)
	{
		return bestellungenDB.getTable(suchstring);
	}

    public Bestellung getBestellung(int aktid)
	{
		return bestellungenDB.get(aktid);
	}

	public DataTable getBestellungenKomplettTabelle()
	{
		return bestellungenDB.getKomplettTable();
	}

    public void updateBestellung(Bestellung aktbestellung)
	{
		bestellungenDB.update(aktbestellung);

		int tempKuchenID = aktbestellung.KuchenId;
		int tempKuchenVeraenderung = -1 * aktbestellung.Menge;

		kuchenDB.setVorrat(tempKuchenID, tempKuchenVeraenderung);
	}

    public void updateBestellung(Bestellung aktbestellung, int alterKuchenID, int alterKuchenMenge)
	{
		bestellungenDB.update(aktbestellung);

		int tempKuchenID = aktbestellung.KuchenId;
		int tempKuchenVeraenderung = -1 * aktbestellung.Menge;

		kuchenDB.setVorrat(tempKuchenID, tempKuchenVeraenderung);

		kuchenDB.setVorrat(alterKuchenID, alterKuchenMenge);
	}

    public int insertBestellung(Bestellung neubestellung)
	{
		int tempNeuID = bestellungenDB.insert(neubestellung);

		int tempKuchenID = neubestellung.KuchenId;
		int tempKuchenVeraenderung = -1 * neubestellung.Menge;
	
		kuchenDB.setVorrat(tempKuchenID, tempKuchenVeraenderung);
	
		return tempNeuID;
	}

    public void deleteBestellung(int aktid)
	{
		bestellungenDB.del(aktid);
	}

	//KuchenDB
    public List<String> getKuchenList()
	{
		return kuchenDB.getList();
	}

    public bool changedKuchenList()
	{
		return kuchenDB.isChanged;
	}

    public DataTable getKuchenTabelle()
	{
		return kuchenDB.getTable();
	}

    public DataTable getKuchenTabelle(String suchstring)
	{
		return kuchenDB.getTable(suchstring);
	}

	public Kuchen getKuchen(int aktid)
	{
		return kuchenDB.get(aktid);
	}

	public void updateKuchen(Kuchen aktkuchen)
	{
		kuchenDB.update(aktkuchen);
	}

	public int insertKuchen(Kuchen aktkuchen)
	{
		return kuchenDB.insert(aktkuchen);
	}

    public void deleteKuchen(int aktid)
	{
		kuchenDB.del(aktid);
	}

    public int getVorratKuchen(int aktid)
	{
		return kuchenDB.getVorrat(aktid);
	}

    public double getPreisKuchen(int aktid)
	{
		return kuchenDB.getPreis(aktid);
	}

    public int getKuchenBestellungenGesamt(int kuchenid)
	{
		return bestellungenDB.getKuchenGesamt(kuchenid);
	}

	//da die Kuchen in der Access-DB Lücken im Key(Index) haben können, 
	//in der Comboxbox aber nicht, wird hier eine Umsetzung in beide Richtungen
	//über die Dictionary gewährleistet
    public int IdFromIndexKuchen(int index)
	{
		return kuchenDB.getIdFromIndex(index);
	}

    public int IndexFromIdKuchen(int id)
	{
		return kuchenDB.getIndexFromId(id);
	}

	//SortenDB	
	public List<String> getSortenList()
	{
		return sortenDB.getList();
	}

    public String getSorte(int kuchenid)
	{
		List<String> backwaren = sortenDB.getList();
		int fkId = kuchenDB.getSorte(kuchenid);

		return sortenDB.getBackwarenSorte(fkId);
	}
	//GaesteDB
    public List<String> getGaesteList()
	{
		return gaesteDB.getList();
	}

    public bool changedGaesteList()
	{
		return gaesteDB.isChanged;
	}

	public DataTable getGaesteTabelle()
	{
		return gaesteDB.getTable();
	}

    public DataTable getGaesteTabelle(String suchstring)
	{
		return gaesteDB.getTable(suchstring);
	}

    public Gast getGaeste(int aktid)
	{
		return gaesteDB.get(aktid);
	}

    public void updateGaeste(Gast aktgast)
	{
		gaesteDB.update(aktgast);
	}

    public int insertGaeste(Gast aktgast)
	{
		return gaesteDB.insert(aktgast);
	}

    public void deleteGaeste(int aktid)
	{
		gaesteDB.del(aktid);
	}
	
	//da die Gaeste in der Access-DB Lücken im Key(Index) haben können, 
	//in der Comboxbox aber nicht, wird hier eine Umsetzung in beide Richtungen
	//über die Dictionary gewährleistet
    public int IdFromIndexGaeste(int index)
	{
		return gaesteDB.getIdFromIndex(index);
	}

    public int IndexFromIdGaeste(int id)
	{
		return gaesteDB.getIndexFromId(id);
	}

    public int getGaesteBestellungenGesamt(int gaesteid)
	{
		return bestellungenDB.getGaesteGesamt(gaesteid);
	}

	//EinrichtungenDB	
    public List<String> getEinrichtungenList()
	{
		return einrichtungenDB.getList();
	}

    public String getEinrichtung(int gaesteid)
	{
		return einrichtungenDB.getEinrichtung(gaesteid);
	}
};