#pragma once
#include "ergebnis.h"
#include "art.h"
#include <vector>
#include "massnahme.h"
#include "gruenland.h"
#include <algorithm>

class modell
{
public:
    modell( void);
    ~modell( void);
    struct mgruenland
    {
        massnahme massnahm;
        vector< gruenland*> gliste;
        vector< double> faktorliste;
        vector< double> kosten;
        vector< double> gewinn;
        vector< double> kosten_berg;
        vector< double> gewinn_berg;
        double hoehe_niedrig1;
        double hoehe_niedrig2;
        double hoehe_niedrig3;
        double hoehe_mittel1;
        double hoehe_mittel2;
        double hoehe_mittel3;
        double hoehe_hoch1;
        double hoehe_hoch2;
        double hoehe_hoch3;
    };
    vector< mgruenland> massnamegruenlandliste;
    ergebnis* create_oekologiemodell( art* artdata, int bundeslandID);
    ergebnis*** create_oekologiemodell(
            vector< art*> artlist,
            vector< massnahme> mliste,
            double minqualitaet,
            int bundeslandID,
            bool hoch,
            bool egal);
    struct artenqualitaet
    {
        art* art;
        double qualitaet;
    };
    struct gruenlandqualitaet
    {
        int gruenlandID;
        double gqualitaet;
    };
    struct masspixelergeb
    {
        int pixelID;
        int matrix_i;
        int matrix_j;
        vector< artenqualitaet> artenq;
        double kosten;
        double gewinn;
        massnahme m;
        vector< gruenlandqualitaet> gq;
		double eff;
    };
    void calculate_oekologiemodell(
            vector< art*> artlist,
            vector< massnahme> mliste,
            vector< double> minqualitaet,
            vector< vector< struct masspixelergeb> >& ergebvector,
            int bundeslandID,
            bool hoch,
            bool egal);
    int getenergiehoehe( massnahme ma, bool verschiebung1);
		
	static double berechneFlaeche(vector<artenqualitaet> &aq, vector<double> &gewichte);



};
