from __future__ import annotations

from uuid import uuid4

from src.domain.discord_community.roles import (
    ROLE_CUSTOMER,
    ROLE_EVALUATING,
    ROLE_PRO_CUSTOMER,
    community_role_name,
)
from src.domain.discord_community.service import decode_discord_oauth_state, encode_discord_oauth_state


class _Settings:
    jwt_secret = "test-discord-jwt-secret"


def test_community_role_name_maps_plans():
    assert community_role_name(plan_slugs=["free"], any_paid=False) == ROLE_EVALUATING
    assert community_role_name(plan_slugs=["basic"], any_paid=True) == ROLE_CUSTOMER
    assert community_role_name(plan_slugs=["pro"], any_paid=True) == ROLE_PRO_CUSTOMER
    assert community_role_name(plan_slugs=["enterprise"], any_paid=True) == ROLE_PRO_CUSTOMER
    assert community_role_name(plan_slugs=[None], any_paid=False) == ROLE_EVALUATING


def test_discord_oauth_state_roundtrip():
    user_id = uuid4()
    token = encode_discord_oauth_state(user_id, _Settings())
    assert decode_discord_oauth_state(token, _Settings()) == user_id
