"""Fixtures for the forum models."""
import datetime
import pytest

from flaskbb.forum.models import Forum, Category, Topic, Post, ForumsRead


@pytest.fixture
def category(database):
    """A single category."""
    category = Category(title="Test Category")
    category.save()
    return category


@pytest.fixture
def forum(category, default_settings):
    """A single forum in a category."""
    forum = Forum(title="Test Forum", category_id=category.id)
    forum.save()
    return forum


@pytest.fixture
def topic(forum, user):
    """A topic by a normal user without any extra permissions."""
    topic = Topic(title="Test Topic Normal")
    post = Post(content="Test Content Normal")
    return topic.save(forum=forum, user=user, post=post)


@pytest.fixture
def topic_moderator(forum, moderator_user):
    """A topic by a user with moderator permissions."""
    topic = Topic(title="Test Topic Moderator")
    post = Post(content="Test Content Moderator")
    return topic.save(forum=forum, user=moderator_user, post=post)

@pytest.fixture
def forumsread_last_read():
    """The datetime of the formsread last_read."""
    return datetime.datetime.utcnow() - datetime.timedelta(hours=1)

@pytest.fixture
def forumsread(user, forum, forumsread_last_read):
    """Create a forumsread object for the user and a forum."""
    forumsread = ForumsRead()
    forumsread.user_id = user.id
    forumsread.forum_id = forum.id
    forumsread.last_read = forumsread_last_read
    forumsread.save()
    return forumsread