/*
  Copyright (c) 2010 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com
  Copyright (c) 2010 Andras Mantia <andras@kdab.com>

  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2 of the License, or
  (at your option) any later version.

  This program is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  General Public License for more details.

  You should have received a copy of the GNU General Public License along
  with this program; if not, write to the Free Software Foundation, Inc.,
  51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/

#ifndef MAILCOMMON_MAILINTERFACES_H
#define MAILCOMMON_MAILINTERFACES_H

#include <Collection>

#include <KSharedConfig>

namespace MessageComposer {
class MessageSender;
}

namespace Akonadi {
class ChangeRecorder;
class EntityMimeTypeFilterModel;
}

namespace KIdentityManagement {
class IdentityManager;
}

namespace MailCommon {
class FilterDialog;
class JobScheduler;

/** Generic interface for mail kernels.*/
class IKernel
{
public:
    /**
     * Returns a model of all folders in KMail.
     * This is basically the same as entityTreeModel(), but with items
     * filtered out, the model contains only collections.
     */
    virtual Akonadi::EntityMimeTypeFilterModel *collectionModel() const = 0;

    /**
     * Return the pointer to the identity manager.
     */
    virtual KIdentityManagement::IdentityManager *identityManager() = 0;

    virtual KSharedConfig::Ptr config() = 0;
    virtual void syncConfig() = 0;
    virtual JobScheduler *jobScheduler() const = 0;
    virtual Akonadi::ChangeRecorder *folderCollectionMonitor() const = 0;
    virtual void updateSystemTray() = 0;
    virtual MessageComposer::MessageSender *msgSender() = 0;
    virtual void expunge(Akonadi::Collection::Id col, bool sync) = 0;

    virtual ~IKernel()
    {
    }
};

/** Filter related interface */
class IFilter
{
public:
    virtual void openFilterDialog(bool createDummyFilter = true) = 0;
    virtual void createFilter(const QByteArray &field, const QString &value) = 0;
    virtual ~IFilter()
    {
    }
};

/** Interface to access some settings. */
class ISettings
{
public:
    virtual bool showPopupAfterDnD() = 0;

    virtual bool excludeImportantMailFromExpiry() = 0;

    virtual qreal closeToQuotaThreshold() = 0;

    virtual Akonadi::Collection::Id lastSelectedFolder() = 0;
    virtual void setLastSelectedFolder(Akonadi::Collection::Id col) = 0;

    virtual QStringList customTemplates() = 0;

    virtual ~ISettings()
    {
    }
};
}

#endif
