//---------------------------------------------------------------------------
#ifndef GeneratorH
#define GeneratorH
#include "AnalyseSkema.h"
//#include "SqlKlasse.h"
#include "KontrolListe.h"
//#include "Portal.h"
#include "TagTid1.h"
//#include "comm.h"
//---------------------------------------------------------------------------
class Generator
{
public:
  //Konstruktør-
    Generator(KontrolListe* k_, Portal* p_, int col_, int row_, char Kilde_);
    //destructor.
    ~Generator();

  //Overordnede genererings funktioner
    //Funktionen står for hele konstrollen med genererings processe.
	//Frekvens: antallet af gange der skal gå forend et nyt sæt indekser skal
	//beregnes.
	//Styrken: ANtallet af gange som en relation må blive forsøgt lagt.
	//Type: Angiver om projektet allerede tidligere har været genereret.
    bool Generer(int frekvens = 1, int Styrke = 4, int col_= 5, int row_ = 8,
                 int type = 0, bool Skrivebeskyttet = false);

    //Funktionen varetager lægningsprocessen af anden del. DVS HLP relationer.
    bool Session2Del(int frekvens);

    //Funktionen klargøre til generingens dasen 2 del.
    void KlargoerTilGenerering2Del();

    //Funktionen varetager lægnings processen i første del.
    bool Session1Del(int frekvens);

    //Funktionen klargører til første delen.
    bool KlargoerTilGenerering1Del();
    bool KontrollerLister();

  //Funktioner til at lægge en enkelt relation.
    //Funktionen varetager kontrollen med lægings processen af en relation.
    bool LaegRelation();

    //Funktionen forsøger at lægge relationen som en enkel lektioner.
    bool LaegEnkelt(int type = 0);

    //Funktionen lægger en relation som dobbelt lektioner.
    bool LaegDobbelt(int type = 0);
    bool LavASkema(int type);
    void NytDobbeltASkema();
    inline NytASkema(int blok);

private:
    AnalyseSkema* a, *b; //pointere til analyse skemaerne.
    Portal* p; //pointer til portal klassen.
    KontrolListe* k; //pointer til kontrol listen.
    int planlagte;
    int col;
    int row;
    string HoldID, FagID, LaererID, LokaleTypeID, LokaleID;
    string ForrigeHoldID, ForrigeFagID, ForrigeLaererID;
    int blok, PL, LL; //Planlagte (PL) og Lagte lektioner (LL)
    char Kilde;  //angiv er om der skal arbejdes på filer eller databasen.
    string RelationsType;
    bool IndexTidligereBeregnet; //angiver om indekserne allerede er beregnet
    bool TidligereGenereret; //angiver om projektet tidligere har været genereret.
    comm comm;  //kommunikations objekt til brugergrænsen.
    bool Beskyttet; //angiver om man må skrive til databasen eller ej.
};

#endif
