#ifndef REPORTTRANSLATION_H
#define REPORTTRANSLATION_H

#include <QString>
#include <QList>
#include <QLocale>
#include <QMetaType>

#include "lrpagedesignintf.h"


class ATranslationProperty{
public:
    ATranslationProperty(){}
    ATranslationProperty(const ACollectionProperty& ){}
    virtual ~ATranslationProperty(){}
};

Q_DECLARE_METATYPE(ATranslationProperty)
const int TRANSLATION_TYPE_ID = qMetaTypeId<ATranslationProperty>();

namespace LimeReport{

struct PropertyTranslation{
    QString propertyName;
    QString value;
    QString sourceValue;
    bool    checked;
    bool    sourceHasBeenChanged;
};

struct ItemTranslation{
    QString itemName;
    PropertyTranslation* findProperty(const QString& propertyName);
    ~ItemTranslation();
    QList<PropertyTranslation*> propertyesTranslation;
};

struct PageTranslation{
    QString pageName;
    ~PageTranslation();
    QHash<QString,ItemTranslation*> itemsTranslation;
};

class ReportTranslation{
public:
    ReportTranslation(QLocale::Language language) :m_language(language){}
    ReportTranslation(QLocale::Language language, QList<PageDesignIntf*> pages);
    ReportTranslation(const ReportTranslation& reportTranslation);
    ~ReportTranslation();
    QLocale::Language language() const;
    QList<PageTranslation*> pagesTranslation() const;
    PageTranslation* createEmptyPageTranslation();
    void updatePageTranslation(PageDesignIntf* page);
    PageTranslation* findPageTranslation(const QString& page_name);
    void createItemTranslation(BaseDesignIntf* item, PageTranslation* pageTranslation);
private:
    PageTranslation* createPageTranslation(PageDesignIntf* page);
private:
    QLocale::Language m_language;
    QList<PageTranslation*> m_pagesTranslation;
};


typedef QMap<QLocale::Language, ReportTranslation*> Translations;

class ITranslationContainer{
public:
    virtual ~ITranslationContainer(){}
    virtual Translations* translations() = 0;
    virtual void updateTranslations() = 0;
    virtual bool addTranslationLanguage(QLocale::Language language) = 0;
    virtual bool removeTranslationLanguage(QLocale::Language language) = 0;
    virtual QList<QLocale::Language> aviableLanguages() = 0;
};

} // namespace LimeReport

//Q_DECLARE_METATYPE(ReportTranslation)

#endif // REPORTTRANSLATION_H