#include "TeamOptionen.h"
#include "../../../../Initialisierung/Initialisierung.h"
#include "../../../Karte/EditorKarte.h"

using namespace Editor;

TeamTool::TeamTool( Schrift *zSchrift, KarteDaten *daten )
    : RightTool()
{
    int teamAnzahl = daten->getTeamAnzahl();
    teamAuswahl = initAuswahlBox( 0, 0, 150, 20, zSchrift, AuswahlBox::Style::Normal | AuswahlBox::Style::Hintergrund, {} );
    for( int i = 0; i < teamAnzahl; i++ )
    {
        teamAuswahl->addEintrag( daten->getTeamName( i ) );
    }
    teamAuswahl->setEventAktion( [ this ]( void *p, AuswahlBox *a, int old, int auswahl )
    {
        this->selectTeam( auswahl + 1 );
    } );
    skillStartT = initTextFeld( 0, 30, 290, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "---Startwerte---" );
    skillStartStabilit�tT = initTextFeld( 0, 55, 200, 20, zSchrift, TextFeld::Style::Text, "Stabilit�t" );
    skillStartEnergieT = initTextFeld( 0, 80, 200, 20, zSchrift, TextFeld::Style::Text, "Energie" );
    skillStartReparaturT = initTextFeld( 0, 105, 200, 20, zSchrift, TextFeld::Style::Text, "Reparatur" );
    skillStartAkkuT = initTextFeld( 0, 130, 200, 20, zSchrift, TextFeld::Style::Text, "Akku" );
    skillStartWendigkeitT = initTextFeld( 0, 155, 200, 20, zSchrift, TextFeld::Style::Text, "Wendigkeit" );
    skillStartBeschleunigungT = initTextFeld( 0, 180, 200, 20, zSchrift, TextFeld::Style::Text, "Beschleunigung" );
    skillStartAntriebEffizienzT = initTextFeld( 0, 205, 200, 20, zSchrift, TextFeld::Style::Text, "Antrieb Effizienz" );
    skillStartLaserIntensit�tT = initTextFeld( 0, 230, 200, 20, zSchrift, TextFeld::Style::Text, "Laser Intensit�t" );
    skillStartLaserEffizienzT = initTextFeld( 0, 255, 200, 20, zSchrift, TextFeld::Style::Text, "Laser Effizienz" );
    skillStartLaserTempoT = initTextFeld( 0, 280, 200, 20, zSchrift, TextFeld::Style::Text, "Laser Tempo" );
    skillStartEnergieSchildT = initTextFeld( 0, 305, 200, 20, zSchrift, TextFeld::Style::Text, "Energie Schild" );
    skillStartEnergieSchildEffizienzT = initTextFeld( 0, 330, 200, 20, zSchrift, TextFeld::Style::Text, "Schild Effizienz" );
    TeamDaten *Team = daten->getTeam( daten->getTeamIndexById( 1 ) );
    skillStartStabilit�t = initTextFeld( 200, 55, 90, 20, zSchrift, TextFeld::Style::TextFeld, Text( Team->maxStabilit�t ) );
    skillStartEnergie = initTextFeld( 200, 80, 90, 20, zSchrift, TextFeld::Style::TextFeld, Text( Team->maxEnergie ) );
    skillStartReparatur = initTextFeld( 200, 105, 90, 20, zSchrift, TextFeld::Style::TextFeld, Text( Team->reparatur ) );
    skillStartAkku = initTextFeld( 200, 130, 90, 20, zSchrift, TextFeld::Style::TextFeld, Text( Team->akkuLeistung ) );
    skillStartWendigkeit = initTextFeld( 200, 155, 90, 20, zSchrift, TextFeld::Style::TextFeld, Text( Team->wendigkeit ) );
    skillStartBeschleunigung = initTextFeld( 200, 180, 90, 20, zSchrift, TextFeld::Style::TextFeld, Text( Team->beschleunigung ) );
    skillStartAntriebEffizienz = initTextFeld( 200, 205, 90, 20, zSchrift, TextFeld::Style::TextFeld, Text( Team->antriebEffizienz ) );
    skillStartLaserIntensit�t = initTextFeld( 200, 230, 90, 20, zSchrift, TextFeld::Style::TextFeld, Text( Team->laserIntensit�t ) );
    skillStartLaserEffizienz = initTextFeld( 200, 255, 90, 20, zSchrift, TextFeld::Style::TextFeld, Text( Team->laserEffizienz ) );
    skillStartLaserTempo = initTextFeld( 200, 280, 90, 20, zSchrift, TextFeld::Style::TextFeld, Text( Team->laserTempo ) );
    skillStartEnergieSchild = initTextFeld( 200, 305, 90, 20, zSchrift, TextFeld::Style::TextFeld, Text( Team->energieSchild ) );
    skillStartEnergieSchildEffizienz = initTextFeld( 200, 330, 90, 20, zSchrift, TextFeld::Style::TextFeld, Text( Team->energieSchildEffizienz ) );
    speichern = initKnopf( 0, 380, 100, 20, zSchrift, Knopf::Style::Normal, "Speichern" );
    this->daten = daten;
}

TeamTool::~TeamTool()
{
    teamAuswahl->release();
    skillStartT->release();
    skillStartStabilit�tT->release();
    skillStartEnergieT->release();
    skillStartReparaturT->release();
    skillStartAkkuT->release();
    skillStartWendigkeitT->release();
    skillStartBeschleunigungT->release();
    skillStartAntriebEffizienzT->release();
    skillStartLaserIntensit�tT->release();
    skillStartLaserEffizienzT->release();
    skillStartLaserTempoT->release();
    skillStartEnergieSchildT->release();
    skillStartEnergieSchildEffizienzT->release();
    skillStartStabilit�t->release();
    skillStartEnergie->release();
    skillStartReparatur->release();
    skillStartAkku->release();
    skillStartWendigkeit->release();
    skillStartBeschleunigung->release();
    skillStartAntriebEffizienz->release();
    skillStartLaserIntensit�t->release();
    skillStartLaserEffizienz->release();
    skillStartLaserTempo->release();
    skillStartEnergieSchild->release();
    skillStartEnergieSchildEffizienz->release();
    speichern->release();
    daten->release();
}

void TeamTool::doMausEreignis( MausEreignis &me )
{
    bool vera = me.verarbeitet;
    if( hatStyleNicht( Zeichnung::Style::Sichtbar ) )
        me.verarbeitet = 1;
    me.mx -= pos.x;
    me.my -= pos.y;
    teamAuswahl->doMausEreignis( me );
    skillStartT->doMausEreignis( me );
    skillStartStabilit�tT->doMausEreignis( me );
    skillStartEnergieT->doMausEreignis( me );
    skillStartReparaturT->doMausEreignis( me );
    skillStartAkkuT->doMausEreignis( me );
    skillStartWendigkeitT->doMausEreignis( me );
    skillStartBeschleunigungT->doMausEreignis( me );
    skillStartAntriebEffizienzT->doMausEreignis( me );
    skillStartLaserIntensit�tT->doMausEreignis( me );
    skillStartLaserEffizienzT->doMausEreignis( me );
    skillStartLaserTempoT->doMausEreignis( me );
    skillStartEnergieSchildT->doMausEreignis( me );
    skillStartEnergieSchildEffizienzT->doMausEreignis( me );
    skillStartStabilit�t->doMausEreignis( me );
    skillStartEnergie->doMausEreignis( me );
    skillStartReparatur->doMausEreignis( me );
    skillStartAkku->doMausEreignis( me );
    skillStartWendigkeit->doMausEreignis( me );
    skillStartBeschleunigung->doMausEreignis( me );
    skillStartAntriebEffizienz->doMausEreignis( me );
    skillStartLaserIntensit�t->doMausEreignis( me );
    skillStartLaserEffizienz->doMausEreignis( me );
    skillStartLaserTempo->doMausEreignis( me );
    skillStartEnergieSchild->doMausEreignis( me );
    skillStartEnergieSchildEffizienz->doMausEreignis( me );
    bool verarbeitet = me.verarbeitet;
    speichern->doMausEreignis( me );
    if( !verarbeitet && me.verarbeitet && me.id == ME_RLinks )
    {
        TeamDaten *data = daten->getTeam( daten->getTeamIndexById( teamAuswahl->getAuswahl() + 1 ) );
        data->maxStabilit�t = *skillStartStabilit�t->zText();
        data->maxEnergie = *skillStartEnergie->zText();
        data->reparatur = *skillStartReparatur->zText();
        data->akkuLeistung = *skillStartAkku->zText();
        data->wendigkeit = *skillStartWendigkeit->zText();
        data->beschleunigung = *skillStartBeschleunigung->zText();
        data->antriebEffizienz = *skillStartAntriebEffizienz->zText();
        data->laserIntensit�t = *skillStartLaserIntensit�t->zText();
        data->laserEffizienz = *skillStartLaserEffizienz->zText();
        data->laserTempo = *skillStartLaserTempo->zText();
        data->energieSchild = *skillStartEnergieSchild->zText();
        data->energieSchildEffizienz = *skillStartEnergieSchildEffizienz->zText();
        data->update();
    }
    me.mx += pos.x;
    me.my += pos.y;
    if( hatStyleNicht( Zeichnung::Style::Sichtbar ) )
        me.verarbeitet = vera;
}

void TeamTool::doTastaturEreignis( TastaturEreignis &te )
{
    if( hatStyleNicht( Zeichnung::Style::Sichtbar ) )
        return;
    teamAuswahl->doTastaturEreignis( te );
    skillStartT->doTastaturEreignis( te );
    skillStartStabilit�tT->doTastaturEreignis( te );
    skillStartEnergieT->doTastaturEreignis( te );
    skillStartReparaturT->doTastaturEreignis( te );
    skillStartAkkuT->doTastaturEreignis( te );
    skillStartWendigkeitT->doTastaturEreignis( te );
    skillStartBeschleunigungT->doTastaturEreignis( te );
    skillStartAntriebEffizienzT->doTastaturEreignis( te );
    skillStartLaserIntensit�tT->doTastaturEreignis( te );
    skillStartLaserEffizienzT->doTastaturEreignis( te );
    skillStartLaserTempoT->doTastaturEreignis( te );
    skillStartEnergieSchildT->doTastaturEreignis( te );
    skillStartEnergieSchildEffizienzT->doTastaturEreignis( te );
    skillStartStabilit�t->doTastaturEreignis( te );
    skillStartEnergie->doTastaturEreignis( te );
    skillStartReparatur->doTastaturEreignis( te );
    skillStartAkku->doTastaturEreignis( te );
    skillStartWendigkeit->doTastaturEreignis( te );
    skillStartBeschleunigung->doTastaturEreignis( te );
    skillStartAntriebEffizienz->doTastaturEreignis( te );
    skillStartLaserIntensit�t->doTastaturEreignis( te );
    skillStartLaserEffizienz->doTastaturEreignis( te );
    skillStartLaserTempo->doTastaturEreignis( te );
    skillStartEnergieSchild->doTastaturEreignis( te );
    skillStartEnergieSchildEffizienz->doTastaturEreignis( te );
    speichern->doTastaturEreignis( te );
}

bool TeamTool::tick( double tickVal )
{
    if( hatStyleNicht( Zeichnung::Style::Sichtbar ) )
        return __super::tick( tickVal );
    bool ret = __super::tick( tickVal );
    ret |= teamAuswahl->tick( tickVal );
    ret |= skillStartT->tick( tickVal );
    ret |= skillStartStabilit�tT->tick( tickVal );
    ret |= skillStartEnergieT->tick( tickVal );
    ret |= skillStartReparaturT->tick( tickVal );
    ret |= skillStartAkkuT->tick( tickVal );
    ret |= skillStartWendigkeitT->tick( tickVal );
    ret |= skillStartBeschleunigungT->tick( tickVal );
    ret |= skillStartAntriebEffizienzT->tick( tickVal );
    ret |= skillStartLaserIntensit�tT->tick( tickVal );
    ret |= skillStartLaserEffizienzT->tick( tickVal );
    ret |= skillStartLaserTempoT->tick( tickVal );
    ret |= skillStartEnergieSchildT->tick( tickVal );
    ret |= skillStartEnergieSchildEffizienzT->tick( tickVal );
    ret |= skillStartStabilit�t->tick( tickVal );
    ret |= skillStartEnergie->tick( tickVal );
    ret |= skillStartReparatur->tick( tickVal );
    ret |= skillStartAkku->tick( tickVal );
    ret |= skillStartWendigkeit->tick( tickVal );
    ret |= skillStartBeschleunigung->tick( tickVal );
    ret |= skillStartAntriebEffizienz->tick( tickVal );
    ret |= skillStartLaserIntensit�t->tick( tickVal );
    ret |= skillStartLaserEffizienz->tick( tickVal );
    ret |= skillStartLaserTempo->tick( tickVal );
    ret |= skillStartEnergieSchild->tick( tickVal );
    ret |= skillStartEnergieSchildEffizienz->tick( tickVal );
    ret |= speichern->tick( tickVal );
    return ret;
}

void TeamTool::render( Bild &rObj )
{
    if( hatStyleNicht( Zeichnung::Style::Sichtbar ) )
        return;
    if( rObj.setDrawOptions( pos, gr ) )
    {
        skillStartT->render( rObj );
        skillStartStabilit�tT->render( rObj );
        skillStartEnergieT->render( rObj );
        skillStartReparaturT->render( rObj );
        skillStartAkkuT->render( rObj );
        skillStartWendigkeitT->render( rObj );
        skillStartBeschleunigungT->render( rObj );
        skillStartAntriebEffizienzT->render( rObj );
        skillStartLaserIntensit�tT->render( rObj );
        skillStartLaserEffizienzT->render( rObj );
        skillStartLaserTempoT->render( rObj );
        skillStartEnergieSchildT->render( rObj );
        skillStartEnergieSchildEffizienzT->render( rObj );
        skillStartStabilit�t->render( rObj );
        skillStartEnergie->render( rObj );
        skillStartReparatur->render( rObj );
        skillStartAkku->render( rObj );
        skillStartWendigkeit->render( rObj );
        skillStartBeschleunigung->render( rObj );
        skillStartAntriebEffizienz->render( rObj );
        skillStartLaserIntensit�t->render( rObj );
        skillStartLaserEffizienz->render( rObj );
        skillStartLaserTempo->render( rObj );
        skillStartEnergieSchild->render( rObj );
        skillStartEnergieSchildEffizienz->render( rObj );
        speichern->render( rObj );
        teamAuswahl->render( rObj );
        rObj.releaseDrawOptions();
    }
}

void TeamTool::selectTeam( int id )
{
    int index = daten->getTeamIndexById( id );
    teamAuswahl->setAuswahl( id - 1 );
    TeamDaten *Team = daten->getTeam( index );
    skillStartStabilit�t->setText( Text( Team->maxStabilit�t ) );
    skillStartEnergie->setText( Text( Team->maxEnergie ) );
    skillStartReparatur->setText( Text( Team->reparatur ) );
    skillStartAkku->setText( Text( Team->akkuLeistung ) );
    skillStartWendigkeit->setText( Text( Team->wendigkeit ) );
    skillStartBeschleunigung->setText( Text( Team->beschleunigung ) );
    skillStartAntriebEffizienz->setText( Text( Team->antriebEffizienz ) );
    skillStartLaserIntensit�t->setText( Text( Team->laserIntensit�t ) );
    skillStartLaserEffizienz->setText( Text( Team->laserEffizienz ) );
    skillStartLaserTempo->setText( Text( Team->laserTempo ) );
    skillStartEnergieSchild->setText( Text( Team->energieSchild ) );
    skillStartEnergieSchildEffizienz->setText( Text( Team->energieSchildEffizienz ) );
}