/*******************************************************************************
**
** SPDX-FileCopyrightText: Copyright 2023 Open Mobile Platform LLC <community@omp.ru>
** SPDX-License-Identifier: BSD-3-Clause
** This file is part of the OfficeViewer project.
**
** Redistribution and use in source and binary forms,
** with or without modification, are permitted provided
** that the following conditions are met:
**
** * Redistributions of source code must retain the above copyright notice,
**   this list of conditions and the following disclaimer.
** * Redistributions in binary form must reproduce the above copyright notice,
**   this list of conditions and the following disclaimer
**   in the documentation and/or other materials provided with the distribution.
** * Neither the name of the copyright holder nor the names of its contributors
**   may be used to endorse or promote products derived from this software
**   without specific prior written permission.
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
** THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
** FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
** IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
** FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
** OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
** LOSS OF USE, DATA, OR PROFITS;
** OR BUSINESS INTERRUPTION)
** HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE)
** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
** EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
**
*******************************************************************************/


#include <basebookmark.h>
#include "bookmarksmodel.h"

BookmarksModel::BookmarksModel(QObject *parent) : QAbstractListModel(parent) {  }

int BookmarksModel::rowCount(const QModelIndex &parent) const
{
    return parent.isValid() ? 0 : m_data.size();
}

QVariant BookmarksModel::data(const QModelIndex &index, int role) const
{
    if (!index.isValid() || index.row() >= m_data.size())
        return {  };

    const auto *bookmark = m_data.at(index.row());
    if (bookmark == nullptr)
        return {  };

    switch (role) {
    case LevelRole : return QVariant::fromValue(bookmark->level);
    case TitleRole: return QVariant::fromValue(bookmark->title);
    case PageIndexRole: return QVariant::fromValue(bookmark->pageIndex);
    case InPageXRole: return QVariant::fromValue(bookmark->positionInPage.x());
    case InPageYRole: return QVariant::fromValue(bookmark->positionInPage.y());
    }

    return {  };
}

QHash<int, QByteArray> BookmarksModel::roleNames() const
{
    return {
        { LevelRole, "level" },
        { TitleRole, "title" },
        { PageIndexRole, "pageIndex" },
        { InPageXRole, "pageX" },
        { InPageYRole, "pageY" }
    };
}

void BookmarksModel::setNewData(const QVector<BaseBookmark *> &newData)
{
    beginResetModel();
    m_data.clear();
    m_data = newData;
    endResetModel();
}
