/*
  Copyright (c) 2010 Kevin Ottens <ervin@kde.org>

  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.
*/

#include "groupwareuidelegate.h"
#include "incidencedialog.h"
#include "incidencedialogfactory.h"

#include <CalendarSupport/Utils>

#include <Item>
#include "incidenceeditor_debug.h"
using namespace IncidenceEditorNG;

void GroupwareUiDelegate::requestIncidenceEditor(const Akonadi::Item &item)
{
// TODO_KDE5:
// The GroupwareUiDelegate interface should be a QObject. Right now we have no way of emitting a
// finished signal, so we have to use dialog->exec();

    const KCalendarCore::Incidence::Ptr incidence = CalendarSupport::incidence(item);
    if (!incidence) {
        qCWarning(INCIDENCEEDITOR_LOG) << "Incidence is null, won't open the editor";
        return;
    }

    IncidenceDialog *dialog = IncidenceDialogFactory::create(/*needs initial saving=*/ false,
                                                             incidence->type(),
                                                             nullptr);
    dialog->setAttribute(Qt::WA_DeleteOnClose, false);
    dialog->setIsCounterProposal(true);
    dialog->load(item, QDate::currentDate());
    dialog->exec();
    dialog->deleteLater();
    Akonadi::Item newItem = dialog->item();
    if (newItem.hasPayload<KCalendarCore::Incidence::Ptr>()) {
        KCalendarCore::IncidenceBase::Ptr newIncidence = newItem.payload<KCalendarCore::Incidence::Ptr>();
        *incidence.staticCast<KCalendarCore::IncidenceBase>() = *newIncidence;
    }
}

void GroupwareUiDelegate::setCalendar(const Akonadi::ETMCalendar::Ptr &calendar)
{
    // We don't need a calendar.
    Q_UNUSED(calendar);
}

void GroupwareUiDelegate::createCalendar()
{
    // We don't need a calendar
}
