/*
Example02.cpp

Demonstruje wykorzystanie biblioteki aqqlib - Czyli jak zrobić klienta AQQ w 3 krokach :P

Mateusz Szygenda
*/

#include <aqq/aqqlib.h> /* Załączamy wymagany nagłówek aqqlib */
#include <iostream> /* Do pobrania numeru i hasla ze strumieni */

/**
Klasa służy do obsługi zdarzeń związanych z aqqlib

AqqEvents - To specjalna abstrakcyjna klasa którą należy wydziedziczyć i przeciążyć metody wirtualne takie jak newMessageArrived i contactChanged. Obiekt tak wyspecjalizowanej klasy możemy przekazać do nasłuchu(Na nową wiadomość zostanie wywołana nasza metoda).
*/
class AqqClient : AqqEvents
{
public:
	Account konto;

	AqqClient(unsigned int number,char password [100])
	{
		if(konto.aqqLogin(number,password) == ALL_OK)
		{
			konto.setEvents(this);
		}
	}
	/**
		Ta metoda ma zostac wywolana podczas przyjscia nowej wiadomosci
	*/
	void newMessageArrived(Message msg)
	{
		std::cout << msg.getSender() << " Napisal " << msg.getMessage() << "\n";
		konto.getMessageFromQueue(); // Wyrzucam odebraną wiadomosc z kolejki wiadomosci.
	}
	/**
		Ta metoda musi być wywołana podczas przyjścia informacji o kontakcie
	*/
	void contactChanged(Contact contact)
	{
		std::cout << contact.getId() << " Zmienil status na : " << (int)contact.getStat() << " Opis: " << contact.getTextStat();
	}
};

int main()
{
	unsigned int number; // Nasz numer aqq	
	char password [100]; // Nasze haslo do konta aqq
	
	
	std::cout << "Przykladowy klient aqq! \n\n";
	std::cout << "Podaj numer : ";
	std::cin >> number; // Pobieram numer aqq
	std::cout << "\n";
	std::cout << "Podaj haslo : ";
	std::cin >> password; // Pobieram haslo aqq
	
	//Sprobujmy się zalogować:
	AqqClient klient(number,password); 
	if(klient.konto.isLogged()) // jesli jestesmy zalogowani..
	{
		std::cout << "\n Jestesmy zalogowani!";
		// Teraz wyslemy testową wiadomość:
		klient.konto.sendMessage("TEST!", 1111); // 1111 to numer osoby do ktorej pojdzie wiadomosc
		klient.konto.setStatus(NIE_PRZESZKADZAC,"opis"); // Aby pominac status nalezy podac 0
	}
	sleep(10); // niech chwile ponasluchuje...
	return 0;
}
