#pragma once
#include "afxwin.h"
#include <string>
#include <vector>

using namespace std;

class kosten
{
public:
    kosten( void);
    ~kosten( void);
    //vector<double> berechne_referenz(vector<double> gzertrag);
    //vector<double> berechne_gzertrag(int gz1, int gz2, int gz3, int gz4, int e1, int e2, int e3, int e4);
    //double berechne_schnitt(int gruenlandzahl, int mahd1, int mahd2, int duengung, double trockenaws, double energieaws,double trockenheu, double energieheu);
   
	struct verwertbarkeit
    {
        int energiekonzentration;
		double silage;
		double heu;
		double weide;
		double weide3;
    };
	
	double berechne_schnitt(
            double gzertrag,
            double trockenaws,
            double energieaws,
            double trockenheu,
            double energieheu,
			double trockenheu2,
            double energieheu2,
            int netto_energiekonzentration_aws,
            int netto_energiekonzentration_heu,
			double ertragsanteil_m1,
			double ertragsanteil_m2,
            bool streifenmahd,
			vector<verwertbarkeit>& faktorliste);
    double berechne_hutung(
            double gzertrag,
            double trockenaws,
            double energieaws,
            double trockenheu,
            double energieheu,
			double trockenheu2,
            double energieheu2,
			double ertragsanteil_m1,
			double ertragsanteil_m2,
            int netto_energiekonzentration_sonstige,
			vector<verwertbarkeit>& faktorliste);
    double berechne_maehweide(
            double gzertrag,
            double trockenaws,
            double energieaws,
			double trockenheu,
            double energieheu,
			double trockenheu2,
            double energieheu2,
			double ertragsanteil_m1,
			double ertragsanteil_m2,
            int netto_energiekonzentration_aws,
			int netto_energiekonzentration_sonstige,
			vector<verwertbarkeit>& faktorliste);
    void berechne_kostendifferenz(
            vector< double> gzertrag,
            vector< double> refertrag,
            vector< double> refertrag2,
            int gz1,
            int gz2,
            int gz3,
            int gz4,
            bool streifenmahd,
            vector< double>& kostendifferenz,
			vector<verwertbarkeit>& faktorliste);
    double berechne_weidefutter( void);
private:
    int _gruenlandzahl;
public:
    int nettoenergieertrag;
    int netto_energiekonzentration_aws;
    int netto_energiekonzentration_sonstige;
    int mv1;
    int abstand;
	int abstand2;
    double massnahmen_besatzdichte;
    int duengung;
    int viehID;
    double besatzdichte;
    //double faktor; 
    double aufnahmerate;
    double trockenaws_l1;
    double energieaws_l1;
    double trockenheu_l1;
    double energieheu_l1;
    double trockenaws_l2;
    double energieaws_l2;
    double trockenheu_l2;
    double energieheu_l2;
    double trockenaws_l3;
    double energieaws_l3;
    double trockenheu_l3;
    double energieheu_l3;
    double trockenaws_l4;
    double energieaws_l4;
    double trockenheu_l4;
    double energieheu_l4;
	double trocken2heu_l1;
    double energie2heu_l1;
    double trocken2heu_l2;
    double energie2heu_l2;
    double trocken2heu_l3;
    double energie2heu_l3;
	double trocken2heu_l4;
    double energie2heu_l4;
    int verfahren_nr;
	double ertragsanteil_m1;
	double ertragsanteil_m2;
    int nettonaehrstoffertrag;
    vector< double> referezertrag;
    vector< double> ertragdifferenz;
    int einzelertragdifferenz;
	int energiekonzentration;
	/*double verwertbarkeit_silage;
	double verwertbarkeit_heu;
	double verwertbarkeit_weide;
	double verwertbarkeit_weide3;*/

	


	void get_verwertbarkeit(vector<verwertbarkeit>& faktorliste, int energie, double& verwertbarkeit_silage,
	double& verwertbarkeit_heu,double& verwertbarkeit_weide,double& verwertbarkeit_weide3) ;
    
	kosten get_kosten_from_database(
            int verfahren_nr,
            int mv1,
            int abstand,
			int abstand2,
            double grossvieheinheit,
            int viehID,
            int duengung);
};
