#include "StdAfx.h"
#include "verfahren_ertrag.h"
#include "datenbank.h"

verfahren_ertrag::verfahren_ertrag( void)
{
}

verfahren_ertrag::~verfahren_ertrag( void)
{
}
//Berechne die Frischmasse die Abhaengig ist von der Gruenlandzahlen, gz sind die Vorgegebene Gruenlandzahlen mit Beispeielertraegen.
void verfahren_ertrag::berechne_gzertrag(
        int g1,
        int g2,
        int g3,
        int g4,
        int e1,
        int e2,
        int e3,
        int e4,
        vector< double>& gzer)
{
    double gza = g2 - g1;
    CString str;

    double ertrag = e2 - e1;
    double faktor = ertrag / gza;

    gzer[ 0] = 0;
    int i, j;
    j = 1;
    for( i = g1 - 1; i > 0; i--)
    {
        ertrag = e1 - (faktor * j);
        j++;
        if( ertrag > 0)
            gzer[ i] = ertrag;
        else
            gzer[ i] = 0;

    }
    for( i = g1; i < g2; i++)
    {
        j = i - g1;
        ertrag = e1 + (faktor * j);
        gzer[ i] = ertrag;

    }
    gza = g3 - g2;
    ertrag = e3 - e2;
    faktor = ertrag / gza;
    for( i = g2; i < g3; i++)
    {
        j = i - g2;
        ertrag = e2 + (faktor * j);
        gzer[ i] = ertrag;

    }
    gza = g4 - g3;
    ertrag = e4 - e3;
    faktor = ertrag / gza;
    for( i = g3; i < 101; i++)
    {
        j = i - g3;
        ertrag = e3 + (faktor * j);

        gzer[ i] = ertrag;

    }
    //AfxMessageBox("durch die letzte Kategorie durch",MB_YESNO,0);
    //return gzer;
}
void verfahren_ertrag::berechne_referenz(
        vector< double> gzertrag,
        int verfahren_nr,
        vector< double>& refenergiekosten)
{

    vector< double>::iterator i;
    int j = 0;
    double brutto_frischmasse_ges, brutto_frischmasse_aws,
            brutto_frischmasse_heu;
    //brutto_frischmasse_ges = kosten::gzertrag[gruenlandzahl];
    if( verfahren_nr == 1) //den 3Schnitt als Referenz fuer die Mahd
    {
        for( i = gzertrag.begin(); i < gzertrag.end(); i++)
        {

            CString str;
            brutto_frischmasse_aws = (*i) * 0.4;
            brutto_frischmasse_heu = (*i) * 0.6;
            double brutto_trockenmasse_ges, brutto_trockenmasse_aws,
                    brutto_trockenmasse_heu;
            brutto_trockenmasse_ges = (*i) * 0.2;
            brutto_trockenmasse_aws = ((*i) * 0.2) * 0.4;
            brutto_trockenmasse_heu = ((*i) * 0.2) * 0.6;
            double netto_trockenmasse_aws = brutto_trockenmasse_aws * 0.85;
            double netto_trockenmasse_heu = brutto_trockenmasse_heu * 0.80;
            double netto_trockenmasse_ges = netto_trockenmasse_aws
                    + netto_trockenmasse_heu;
            //const int netto_energiekonzentration_aws = 1070;//ist fuer das Verfahren schon gesetzt
            //const int netto_energiekonzentration_heu = 910;//ist fuer das Verfahren schon gesetzt
            double netto_energiekonzentration_mittel =
                    (netto_energiekonzentration_aws * 0.4)
                            + (netto_energiekonzentration_sonstige * 0.6);
            double netto_naehrstoffertrag_ges = netto_trockenmasse_ges
                    * netto_energiekonzentration_mittel;
            //int netto_energieertrag_ges = (netto_energiekonzentration_mittel* 0.61)* netto_trockenmasse_ges;

            int netto_energieertrag_ges = int(
                    ((((((*i) * 0.2) * 0.4 * 0.85)
                            * netto_energiekonzentration_aws) * 0.61)
                            + (((((*i) * 0.2) * 0.6 * 0.80)
                                    * netto_energiekonzentration_sonstige)
                                    * 0.61)));
            refenergiekosten[ j] = netto_energieertrag_ges;
            //str.Format(_T("%.5f"),refenergiekosten[j]*0.0262);
            //AfxMessageBox(str,MB_YESNO,0);
            j++;
        }
        //j= 0;
    } else
    {
        if( verfahren_nr == 4) //Die intensive Weide
        {
            for( i = gzertrag.begin(); i < gzertrag.end(); i++)
            {

                double brutto_trockenmasse_ges;
                brutto_trockenmasse_ges = (*i) * 0.18;
                double netto_trockenmasse_ges = brutto_trockenmasse_ges * 0.80;
                double netto_naehrstoffertrag_ges = netto_trockenmasse_ges
                        * netto_energiekonzentration_sonstige;
                int netto_energieertrag_ges = int(
                        ((*i) * 0.18 * 0.8 * netto_energiekonzentration_sonstige
                                * 0.61));
                refenergiekosten[ j] = netto_energieertrag_ges;
                j++;
            }

        } else //die intensive Maehweide
        {
            //j= 0;
            for( i = gzertrag.begin(); i < gzertrag.end(); i++)
            {
                brutto_frischmasse_aws = (*i) * (0.333);
                double brutto_frischmasse_weidefutter = (*i) * (0.666);
                double brutto_trockenmasse_ges, brutto_trockenmasse_aws,
                        brutto_trockenmasse_weidefutter;
                brutto_trockenmasse_ges = (*i) * 0.2;
                brutto_trockenmasse_aws = ((*i) * 0.2) * (0.333);
                brutto_trockenmasse_weidefutter = ((*i) * 0.18) * (0.666);
                double netto_trockenmasse_aws = brutto_trockenmasse_aws * 0.85;
                double netto_trockenmasse_weidefutter =
                        brutto_trockenmasse_weidefutter * 0.80;
                double netto_trockenmasse_ges = netto_trockenmasse_aws
                        + netto_trockenmasse_weidefutter;
               
                
                int netto_energieertrag_ges = int(
                        (((((*i) * 0.2) * (0.333) * 0.85)
                                * netto_energiekonzentration_aws) * 0.61)
                                + (((((*i) * 0.18) * (0.666) * 0.80)
                                        * netto_energiekonzentration_sonstige)
                                        * 0.61));
                refenergiekosten[ j] = netto_energieertrag_ges;

                j++;
            }

        }

    }

    //return refenergiekosten;
}
verfahren_ertrag verfahren_ertrag::get_verfahren_kosten_from_database(
        int verfahren_nr)
{

    verfahren_ertrag* d_kosten = new verfahren_ertrag();
    datenbank* daten = new datenbank();
    //Connection* con = daten->datacon();
    (*d_kosten) = daten->returnverfahrenkosten( verfahren_nr);

    delete daten;
    return (*d_kosten);

}