//---------------------------------------------------------------------------
#ifndef EdderkopH
#define EdderkopH
#include "Generator.h"
//#include "Portal.h"
#include "PlanKlasse.h"
//#include "SqlKLasse.h"
//#include "comm.h"
//---------------------------------------------------------------------------
class Edderkop
{
public:
  //Konstruktører
   	Edderkop(char Kilde_ = 'f', int Version_ = 1);
    //destructor.
    ~Edderkop();

  //funktion til valg af plan.
    //Funktionen indlæser en givent plan bestemt udfra planID'et.
  	bool VaelgPlan(const string PlanID);

  //Hent funktioner.
    //Initialiserings funktion til at starte hentningen af alle planID'er.
	bool StartHentningAfPlanListe();

    //Funktionen henter det næste PLan ID på listen.
	bool HentNaestePlanID(string& ID);

    //Initialisings funktion til at starte hentningen af en given liste.
	void StartHentningAfListe(char type);

    //Funktionen henter det næste ID på listen, initialiseret i ovenfor funktion.
	bool HentNaestePaaListen(string& ID);

    //Initialiserings funktion til at starte hentningen af et givent skema.
	bool StartHentningAfSkema(const string ID, char type);

    //FUnktionen henter den næste lektion på stacken, fyldt i forrige lektion.
	bool HentNaesteLektion(string& HoldID, string& FagID,
                                 string& LaererID, string& LokaleID,
                                 int& col, int& row);

  //speciel Gem og slet funktion-
    //Funktionen gemmer de 3 skematyper til hver sin fil.
	void GemTilFil();

    //Funktionen sletter alle vigtige lister der bliver indlæst iforbindelse med
	//genereringen.
	void Slet();

private:
	Portal* PortalPtr;             //Pointer til potal klassen.
    KontrolListe* KontrolListePtr; //pointer til kontrol listen.
    Generator* GeneratorPtr;       //pointer til generator klassen.
    Plan* PlanPtr;                 //pointer til plan klassen.
    SqlKlasse* db;                 //pointer til databasen.
    char Kilde;                    //angiver om der benyttes DB eller filer.

    string TFF, PlanID;            //TFF:timefag fordeling.
    int col, row;
    stack<string> PlanListe;       //Liste med PLan ID'er
    stack<string>* HoldListe;
    stack<string>* LaererListe;
    stack<string>* LokaleListe;
    stack<string>* Liste;          //Liste indeholdende ID'er fra kontrolListen.
    stack<LektionsData*>* Skema;   //Liste med et lektions skema på.
    LektionsData* Lektion;         //sepcielt Lektions objekt.
    comm comm;                     //objekt til at kommunikere med brugergrænsen.

public:
  //basis funktioner.
	void Gem();
	bool StartGenerering(int frekvens, int styrke, int col, int row, int type, bool Skrivebeskyttet);
	bool PrintSkema(const string& ID, char type);

  //optællings og beregnings funktioner.
	double VariansFor(string& ID, char type);
	int LagteLektioner(string& ID, char type);
	int PlanlagteLektioner(const string& ID, char type);
	int BeregnTotalePlanlagteLektioner();
	int BeregnTotaleLagteLektioner();
	int AntalMellemLektioner();
};
#endif
