from types import SimpleNamespace

import pytest

from src.domain.prompt_suggestions.service import PromptSuggestionService


class FakeRepo:
    def __init__(self, items):
        self.items = items

    async def list(self, *, active_only=False):
        return self.items


@pytest.mark.asyncio
async def test_returns_multiple_matching_prompts_in_priority_order():
    service = PromptSuggestionService.__new__(PromptSuggestionService)
    service.repo = FakeRepo([
        SimpleNamespace(priority=10, matching_keywords=["law"], excluded_keywords=[], required_keywords=[], project_types=[], is_fallback=False),
        SimpleNamespace(priority=9, matching_keywords=["law firm"], excluded_keywords=[], required_keywords=[], project_types=[], is_fallback=False),
        SimpleNamespace(priority=100, matching_keywords=[], excluded_keywords=[], required_keywords=[], project_types=[], is_fallback=True),
    ])
    result = await service.suggest("RF Law Firm")
    assert len(result) == 2
    assert result[0].priority == 10


@pytest.mark.asyncio
async def test_phrase_exclusions_do_not_match_individual_words():
    service = PromptSuggestionService.__new__(PromptSuggestionService)
    service.repo = FakeRepo([
        SimpleNamespace(priority=10, matching_keywords=["law"], excluded_keywords=["law firm directory"], required_keywords=[], project_types=[], is_fallback=False),
        SimpleNamespace(priority=100, matching_keywords=[], excluded_keywords=[], required_keywords=[], project_types=[], is_fallback=True),
    ])
    result = await service.suggest("RF Law Firm")
    assert len(result) == 1
    assert result[0].is_fallback is False
