/*
 * UBAbstractVotingSystem.h
 *
 *  Created on: 12 feb. 2010
 *      Author: Luc
 */

#ifndef UBABSTRACTVOTINGSYSTEM_H_
#define UBABSTRACTVOTINGSYSTEM_H_

#include <QtCore>

#include "core/UBApplication.h"

class UBAbstractVotingSystem : public QObject
{
    Q_OBJECT;

    Q_PROPERTY(QString lastError READ lastError);

    public:
        UBAbstractVotingSystem(QObject *parent = 0);
        virtual ~UBAbstractVotingSystem();

        virtual bool connectToVotingSystem() = 0;

        virtual bool startPolling() = 0;

        virtual bool stopPolling() = 0;

        virtual bool disconnectFromVotingSystem() = 0;

        virtual QMap<int, int> votingState() = 0;

        QString lastError() const
        {
            return mLastError;
        }

    signals:

        void voteReceived(int keypadID, int value);

        void errorReceived(const QString& error);

    protected:

        void setLastError(QString pLastError);

    private:

        QString mLastError;

};

class UBVotingSystemFactory : public QObject
{
    private:
        UBVotingSystemFactory()
        {
            // NOOP
        }

        ~UBVotingSystemFactory()
        {
            // NOOP
        }

    public:

        static UBAbstractVotingSystem* createVotingSystem();
};

#endif /* UBABSTRACTVOTINGSYSTEM_H_ */