#include "stdafx.h"
#include "massnahme.h"
#include "datenbank.h"
#include "afxwin.h"
using namespace std;

massnahme::massnahme( void) :
                name( _T( "")),
                mv1massnahme( 0),
                abstand2massnahme( 0),
                duengung( 0),
                zahlung( 0),
                hoehenanteil_niedrig( 0),
                hoehenanteil_mittel( 0),
                hoehenanteil_hoch( 0)
{
}

massnahme::~massnahme( void)
{
}
double massnahme::berechne_hanteil(
        double besatzdichte_min,
        double besatzdichte_max,
        double hoehe_min,
        double hoehe_max)
{
    double anteil = (hoehe_max - hoehe_min)
            / ((besatzdichte_max - besatzdichte_min) / 0.5); //Die 0.5 ist die zugelassene Schrittgroese fuer die Grossvieheinheiten
    //wenn die Schrittgroese geaendert wird umbedingt hier die 0.5 anpassen!!!!!!
    anteil = hoehe_min
            + ((((grossvieheinheit - besatzdichte_min) / 0.5)) * anteil);
    return anteil;

}

bool massnahme::save_massnahme_in_database()
{
    datenbank database;

    // Alle festen Werte ersetzen durch die Eingabe des Benutzers!!!!
    int mvstart = 13;
    string name = "maehweide";
    int tier;
    int mvende2schnitt = 30;
    int mvende1schnitt = 28;
    bool gespeichert;
    //erste Schleife Ohne Duengung-> die ganzen Schleifen rausschmeissen sobald Eingabefenster da ist
    bool duengung = 0;
    int i = mvstart;
    double GV;
    /*
     while (i != (mvende2schnitt+1))
     {
     gespeichert = database.save_massnahme(name, i, 0, tier,GV, duengung);
     gespeichert = database.save_massnahme(name, i, 4, tier,GV, duengung);
     gespeichert = database.save_massnahme(name, i, 6, tier,GV, duengung);
     gespeichert = database.save_massnahme(name, i, 8, tier,GV, duengung);
     gespeichert = database.save_massnahme(name, i, 10, tier,GV, duengung);
     i++;
     }*/
    while( i != (mvende1schnitt + 1))
    {
        GV = 4;
        tier = 1;
        while( tier < 3)
        {
            gespeichert = database.save_massnahme( name, i, 6,0, tier, GV,
                    duengung, 7);
            tier = tier + 1;
        }

        i++;
    }
    // zweite Schleife mit Duengung
    duengung = 1;
    i = mvstart;
    /*
     while (i != (mvende2schnitt+1))
     {
     gespeichert = database.save_massnahme(name, i, 0, tier, 0, duengung);
     gespeichert = database.save_massnahme(name, i, 4,tier,0, duengung);
     gespeichert = database.save_massnahme(name, i, 6,tier,0, duengung);
     gespeichert = database.save_massnahme(name, i, 8,tier,0, duengung);
     gespeichert = database.save_massnahme(name, i, 10,tier,0, duengung);
     i++;
     }
     */
    while( i != (mvende1schnitt + 1))
    {
        GV = 4;
        tier = 1;
        while( tier < 3)
        {
            gespeichert = database.save_massnahme( name, i, 6,0, tier, GV,
                    duengung, 7);
            tier = tier + 1;
        }

        i++;
    }

    return gespeichert;

}
CString massnahme::toString()
{
	CString strTierart;
	if(tierart == 1)
	{
		strTierart = _T("ruhig");
	}
	else if(tierart == 2)
	{
		strTierart = _T("lebhaft");
	}

	CString strDue;
	if(duengung)
	{
		strDue = _T("ja");
	}
	else
	{
		strDue = _T("nein");
	}

	CString erg;
	if( aufWiese())
	{
		erg.Format("<< %s,%d/%d,D=%s >>",name,mv1massnahme,abstand2massnahme,strDue);
	}
	else
	{
		erg.Format("<< %s,%d/%d,GV=%.1f,Tie=%s,D=%s >>",name,mv1massnahme,abstand2massnahme,grossvieheinheit,strTierart,strDue);
	}
	return erg;
}

bool massnahme::aufWiese()
{
	return (name.Compare( _T("Mahd") ) == 0) || (name.Compare( _T("Streifenmahd") ) == 0);
}

bool massnahme::aufWeide()
{
	return (name.Compare( _T("Umtriebsweide") ) == 0) || (name.Compare( _T("Ganzjahresweide") ) == 0) || (name.Compare( _T("Saisonale_Standweide") ) == 0);
}

bool massnahme::aufMaehweide()
{
	return (name.Compare( _T("Maehweide") ) == 0);
}

int massnahme::berechneTyp()
{
	if(aufWiese() )
		return 0;
	else if (aufWeide() ) 
		return 1;
	else if (aufMaehweide() )
		return 2;
	else
	{
		CString str;
		str.Format("Maßnahme \" %s \"kann keinem Typ zugeordnet werden", toString() );
		AfxMessageBox(str ,MB_OK,0);
		return -1;
	}
}
