#include "..\..\Global\Variablen.h"
#include "Name.h"
#include "..\..\Global\Initialisierung.h"
#include <Punkt.h>
#include <Text.h>

// Inhalt der NameVergessen Klasse aus Name.h
// Konstruktor
NameVergessen::NameVergessen( Schrift *zSchrift, Fenster *zVorLoginFenster )
{
	Punkt bildschirmmitte = Bildschirmmitte();
	nameVergessen = initKnopf( 10, 290, 130, 30, zSchrift, Knopf::Style::Sichtbar, "Name vergessen" );
	nameVergessen->setMausEreignisParameter( this );
	nameVergessen->setMausEreignis( nameVergessenNameVergessenME );
	initToolTip( nameVergessen, "Accoutnt Name per E-MAil senden.", zSchrift->getThis(), hauptScreen );
	zVorLoginFenster->addMember( nameVergessen );
	fenster = initFenster( bildschirmmitte.x - 125, bildschirmmitte.y - 70, 250, 140, zSchrift, Fenster::Style::Erlaubt | Fenster::Style::Rahmen | Fenster::Style::Titel | Fenster::Style::TitelBuffered, "Name vergessen" );
	passwort = initTextFeld( 20, 20, 208, 20, zSchrift, TextFeld::Style::TextFeld, "Passwort" );
	passwort->setTastaturEreignisParameter( this );
	passwort->setTastaturEreignis( nameVergessenPasswortTE );
	initToolTip( passwort, "Accoutnt Passwort.", zSchrift->getThis(), hauptScreen );
	fenster->addMember( passwort );
	geheimnis = initTextFeld( 20, 50, 208, 20, zSchrift, TextFeld::Style::TextFeld, "Geheimis" );
	geheimnis->setTastaturEreignisParameter( this );
	geheimnis->setTastaturEreignis( nameVergessenGeheimnisTE );
	initToolTip( geheimnis, "Account Geheimnis.", zSchrift->getThis(), hauptScreen );
	fenster->addMember( geheimnis );
	weiter = initKnopf( 74, 80, 100, 20, zSchrift, Knopf::Style::Sichtbar, "weiter" );
	weiter->setMausEreignisParameter( this );
	weiter->setMausEreignis( nameVergessenWeiterME );
	nachricht = initTextFeld( 0, 5, 255, 150, zSchrift, TextFeld::Style::HCenter | TextFeld::Style::Mehrzeilig, "" );
	fenster->addMember( nachricht );
	fenster->addMember( weiter );
	zVorLoginFenster->addMember( fenster );
	ref = 1;
}

// Destruktor
NameVergessen::~NameVergessen()
{
	if( nameVergessen )
		nameVergessen = nameVergessen->release();
	if( fenster )
		fenster = fenster->release();
	if( passwort )
		passwort = passwort->release();
	if( geheimnis )
		geheimnis = geheimnis->release();
	if( weiter )
		weiter = weiter->release();
	if( nachricht )
		nachricht = nachricht->release();
}

// Privat
void NameVergessen::zeigeNachricht( const char *txt )
{
	Punkt bildschirmmitte = Bildschirmmitte();
	passwort->löscheStyle( TextFeld::Style::Sichtbar );
	geheimnis->löscheStyle( TextFeld::Style::Sichtbar );
	fenster->setGröße( 250, 150 );
	fenster->setPosition( bildschirmmitte.x - 125, bildschirmmitte.y - 75 );
	weiter->setPosition( 139, 100 );
	weiter->setText( "Ok" );
	nachricht->setText( txt );
	if( nachricht->zText()->getLänge() > 30 )
	{
		int pos = -1;
		bool set = 0;
		int lastp = 0;
		for( int i = 20; i < nachricht->zText()->getLänge(); )
		{
			char *tmp = &nachricht->zText()->getText()[ i ];
			while( *tmp != ' ' && i < nachricht->zText()->getLänge() )
			{
				tmp++;
				i++;
				if( i - 30 >= lastp )
				{
					if( set )
					{
						lastp = pos;
						set = 0;
						nachricht->zText()->getText()[ pos ] = '\n';
					}
					else
						lastp += 5;
				}
			}
			if( i < nachricht->zText()->getLänge() )
			{
				pos = i;
				set = 1;
				tmp++;
				i++;
			}
		}
	}
	nachricht->addStyle( TextFeld::Style::Sichtbar );
}

// Knopfdruck
void NameVergessen::druckFremdKnopf() // Ein anderer Knopf wurde gedrückt
{
	fenster->löscheStyle( Fenster::Style::Sichtbar );
	registerKlient->trenne();
	nameVergessen->setLinienRahmenBreite( 2 );
	nameVergessen->setAlphaFeldFarbe( 0x5500FF00 );
	nameVergessen->setAlphaFeldStärke( -5 );
}

bool NameVergessen::nameVergessenME( void *obj, MausEreignis me ) // MausEreignis im Knopf nameVergessen
{
	if( me.id == ME_RLinks )
	{
		vorLogin->setNameVergessen();

		nameVergessen->setLinienRahmenBreite( 3 );
		nameVergessen->setAlphaFeldFarbe( 0xFF000000 );
		nameVergessen->setAlphaFeldStärke( 20 );
		Punkt bildschirmmitte = Bildschirmmitte();
		fenster->setGröße( 255, 140 );
		fenster->setPosition( bildschirmmitte.x - 125, bildschirmmitte.y - 70 );
		fenster->addStyle( Fenster::Style::Sichtbar );
		nachricht->löscheStyle( TextFeld::Style::Sichtbar );
		weiter->setText( "weiter" );
		weiter->setPosition( 75, 80 );
		passwort->addStyle( TextFeld::Style::Sichtbar );
		geheimnis->addStyle( TextFeld::Style::Sichtbar );
		passwort->addStyle( TextFeld::Style::Fokus );
		passwort->setAuswahl( passwort->zText()->getLänge(), 0 );
	}
	return 1;
}

bool NameVergessen::passwortTE( void *obj, TastaturEreignis te ) // Tastaturereignis im Textfeld passwort
{
	if( te.id == TE_Press && te.taste == T_Enter )
		return 0;
	if( te.id == TE_Press )
		passwort->setSchowChar( '*' );
	if( te.id == TE_Release && ( te.taste == T_Enter || te.taste == T_Tab ) )
	{
		passwort->löscheStyle( TextFeld::Style::Fokus );
		geheimnis->addStyle( TextFeld::Style::Fokus );
		geheimnis->setAuswahl( geheimnis->zText()->getLänge(), 0 );
	}
	if( passwort->zText()->getLänge() >= 25 && istSchreibbar( te.taste ) )
		return 0;
	return 1;
}

bool NameVergessen::geheimnisTE( void *obj, TastaturEreignis te ) // Tastaturereignis im Textfeld geheimnis
{
	if( te.id == TE_Press && te.taste == T_Enter )
		return 0;
	if( te.id == TE_Release && te.taste == T_Enter )
	{
		passwort->löscheStyle( TextFeld::Style::Fokus );
		MausEreignis me;
		me.id = ME_RLinks;
		weiterME( 0, me );
	}
	if( passwort->zText()->getLänge() >= 25 && istSchreibbar( te.taste ) )
		return 0;
	return 1;
}

bool NameVergessen::weiterME( void *obj, MausEreignis me ) // MausEreignis im Knopf weiter
{
	if( me.id == ME_RLinks )
	{
		if( weiter->zText( )->istGleich( "weiter" ) )
		{
			if( passwort->zText( )->getLänge( ) == 0 )
				zeigeNachricht( "Bitte gebe dein Accountpasswort ein." );
			if( geheimnis->zText( )->getLänge( ) == 0 )
				zeigeNachricht( "Bitte gebe dein Accountgeheimnis ein." );
			if( weiter->zText( )->istGleich( "Ok" ) )
				return 1;
			new AktionsThread( 12, passwort->zText( )->getText( ), geheimnis->zText( )->getText( ), 0, 0, 0 );
		}
		else
		{
			Punkt bildschirmmitte = Bildschirmmitte( );
			fenster->setGröße( 255, 140 );
			fenster->setPosition( bildschirmmitte.x - 125, bildschirmmitte.y - 70 );
			fenster->addStyle( Fenster::Style::Sichtbar );
			nachricht->löscheStyle( TextFeld::Style::Sichtbar );
			weiter->setText( "weiter" );
			weiter->setPosition( 75, 80 );
			passwort->addStyle( TextFeld::Style::Sichtbar );
			geheimnis->addStyle( TextFeld::Style::Sichtbar );
			passwort->addStyle( TextFeld::Style::Fokus );
			passwort->setAuswahl( passwort->zText( )->getLänge( ), 0 );
		}
	}
	return 1;
}

void NameVergessen::setResult( bool ret ) // Setzt den Returnwert
{
	if( ret )
		zeigeNachricht( "Dir wurde eine E-Mail mit deinem Accountnamen geschickt." );
	else if( registerKlient->getLetzterFehler() )
		zeigeNachricht( registerKlient->getLetzterFehler() );
	else
		zeigeNachricht( "Es ist ein Unbekannter Fehler aufgetreten." );
}

// Reference Counting
NameVergessen *NameVergessen::getThis()
{
	ref++;
	return this;
}

NameVergessen *NameVergessen::release()
{
	ref--;
	if( !ref )
		delete this;
	return 0;
}


// messages
bool nameVergessenNameVergessenME( void *p, void *obj, MausEreignis me )
{
	if( !p )
		return 0;
	return ( (NameVergessen*)p )->nameVergessenME( obj, me );
}

bool nameVergessenPasswortTE( void *p, void *obj, TastaturEreignis te )
{
	if( !p )
		return 0;
	return ( (NameVergessen*)p )->passwortTE( obj, te );
}

bool nameVergessenGeheimnisTE( void *p, void *obj, TastaturEreignis te )
{
	if( !p )
		return 0;
	return ( (NameVergessen*)p )->geheimnisTE( obj, te );
}

bool nameVergessenWeiterME( void *p, void *obj, MausEreignis me )
{
	if( !p )
		return 0;
	return ( (NameVergessen*)p )->weiterME( obj, me );
}