/*
 * Mirai. Copyright (C) 2024 Vyn
 * This file is licensed under version 3 of the GNU General Public License (GPL-3.0-only)
 * The license can be found in the LICENSE file or at https://www.gnu.org/licenses/gpl-3.0.txt
 */

#include "TaskItem.h"
#include "BaseSource.h"
#include "utils.h"
#include <iostream>

namespace mirai
{

int TaskItem::nextId = 0;

TaskItem &TaskItem::operator=(const TaskItemData &newData)
{
	data = newData;
	onChange();
	return *this;
};

TaskItem::TaskItem(BaseSource *source, Day *day, TaskItemData data)
	: source_(source), day_(day), data(data)
{
}

void TaskItem::markAsDone()
{
	data.state = DONE;
	onChange();
}

void TaskItem::markAsUndone()
{
	data.state = TODO;
	onChange();
}

void TaskItem::setText(const std::string &text)
{
	this->data.text = text;
	onChange();
}

const std::string &TaskItem::getText() const
{
	return data.text;
}

const TaskItemState &TaskItem::getState() const
{
	return data.state;
}

const Tags &TaskItem::getTags() const
{
	return data.tags;
}

bool TaskItem::hasTag(const std::string &tag) const
{
	return vectorUtils::contains(data.tags, tag);
}

void TaskItem::onChange()
{
	source()->setDirty(true);
}

int TaskItem::id() const
{
	return id_;
}

BaseSource *TaskItem::source()
{
	return source_;
}

Day *TaskItem::day()
{
	return day_;
}

} // namespace mirai
