import pytest
from flaskbb.user.models import User, Guest


@pytest.fixture
def guest():
    """Return a guest (not logged in) user."""
    return Guest()


@pytest.fixture
def user(default_groups):
    """Creates a user with normal permissions."""
    user = User(username="test_normal", email="test_normal@example.org",
                password="test", primary_group=default_groups[3],
                activated=True)
    user.save()
    return user


@pytest.fixture
def moderator_user(user, forum, default_groups):
    """Creates a test user with moderator permissions."""

    user = User(username="test_mod", email="test_mod@example.org",
                password="test", primary_group=default_groups[2],
                activated=True)
    user.save()

    forum.moderators.append(user)
    forum.save()
    return user


@pytest.fixture
def admin_user(default_groups):
    """Creates a admin user."""
    user = User(username="test_admin", email="test_admin@example.org",
                password="test", primary_group=default_groups[0],
                activated=True)
    user.save()
    return user


@pytest.fixture
def super_moderator_user(default_groups):
    """Creates a super moderator user."""
    user = User(username="test_super_mod", email="test_super@example.org",
                password="test", primary_group=default_groups[1],
                activated=True)
    user.save()
    return user


@pytest.fixture
def Fred(default_groups):
    """Fred is an interloper and bad intentioned user, he attempts to
    access areas he shouldn't, he posts trollish and spammy content,
    he does everything he can to destroy the board.

    Our job is stop Fred.
    """
    fred = User(username='Fred', email='fred@fred.fred',
                password='fred', primary_group=default_groups[3],
                activated=True)
    fred.save()
    return fred


@pytest.fixture
def unactivated_user(default_groups):
    """
    Creates an unactivated user in the default user group
    """
    user = User(username='notactive', email='notactive@example.com',
                password='password', primary_group=default_groups[3],
                activated=False)
    user.save()
    return user