"""Fixtures for domain_classifier module tests."""

from datetime import datetime, timezone
from unittest.mock import MagicMock

import pytest


@pytest.fixture
def mock_session():
    """Mock SQLAlchemy session."""
    session = MagicMock()
    return session


@pytest.fixture
def mock_llm():
    """Mock LLM instance."""
    llm = MagicMock()
    mock_response = MagicMock()
    mock_response.content = '{"category": "News & Media", "subcategory": "Tech News", "confidence": 0.9, "reasoning": "Tech news website"}'
    llm.invoke.return_value = mock_response
    return llm


@pytest.fixture
def mock_research_resource():
    """Mock ResearchResource."""
    resource = MagicMock()
    resource.title = "Test Article"
    resource.url = "https://example.com/test"
    resource.content_preview = "This is a test preview content for the article."
    return resource


@pytest.fixture
def mock_domain_classification():
    """Mock DomainClassification."""
    classification = MagicMock()
    classification.id = 1
    classification.domain = "example.com"
    classification.category = "News & Media"
    classification.subcategory = "Tech News"
    classification.confidence = 0.9
    classification.reasoning = "Tech news website"
    classification.sample_titles = '["Test Article"]'
    classification.sample_count = 1
    classification.created_at = datetime(
        2024, 1, 1, 10, 0, 0, tzinfo=timezone.utc
    )
    classification.updated_at = datetime(
        2024, 1, 1, 10, 0, 0, tzinfo=timezone.utc
    )
    # Configure to_dict to return an actual dict
    classification.to_dict.return_value = {
        "id": 1,
        "domain": "example.com",
        "category": "News & Media",
        "subcategory": "Tech News",
        "confidence": 0.9,
        "reasoning": "Tech news website",
        "sample_titles": '["Test Article"]',
        "sample_count": 1,
        "created_at": "2024-01-01T10:00:00+00:00",
        "updated_at": "2024-01-01T10:00:00+00:00",
    }
    return classification


@pytest.fixture
def sample_samples():
    """Sample resource data."""
    return [
        {
            "title": "Article 1",
            "url": "https://example.com/1",
            "preview": "Preview 1",
        },
        {
            "title": "Article 2",
            "url": "https://example.com/2",
            "preview": "Preview 2",
        },
    ]
