"""Tests for DocumentSchedulerSettings dataclass.

Note: More comprehensive tests for the TTL-cached settings retrieval are in
test_settings_cache.py. These tests focus on the dataclass itself.
"""

from dataclasses import FrozenInstanceError

import pytest

from src.local_deep_research.scheduler.background import (
    DocumentSchedulerSettings,
)


class TestDocumentSchedulerSettings:
    """Tests for the DocumentSchedulerSettings frozen dataclass."""

    def test_default_values(self):
        """Dataclass has correct default values."""
        settings = DocumentSchedulerSettings()

        assert settings.enabled is True
        assert settings.interval_seconds == 1800
        assert settings.download_pdfs is False
        assert settings.extract_text is True
        assert settings.generate_rag is False
        assert settings.sweep_library_collections is False
        assert settings.last_run == ""

    def test_custom_values(self):
        """Dataclass accepts custom values."""
        settings = DocumentSchedulerSettings(
            enabled=False,
            interval_seconds=3600,
            download_pdfs=True,
            extract_text=False,
            generate_rag=True,
            sweep_library_collections=True,
            last_run="2025-01-01T00:00:00+00:00",
        )

        assert settings.enabled is False
        assert settings.interval_seconds == 3600
        assert settings.download_pdfs is True
        assert settings.extract_text is False
        assert settings.generate_rag is True
        assert settings.sweep_library_collections is True
        assert settings.last_run == "2025-01-01T00:00:00+00:00"

    def test_partial_values(self):
        """Dataclass accepts partial values with defaults for the rest."""
        settings = DocumentSchedulerSettings(
            enabled=False,
            download_pdfs=True,
        )

        assert settings.enabled is False
        assert settings.interval_seconds == 1800  # default
        assert settings.download_pdfs is True
        assert settings.extract_text is True  # default
        assert settings.generate_rag is False  # default
        assert settings.last_run == ""  # default

    def test_frozen_immutability(self):
        """Frozen dataclass raises FrozenInstanceError on mutation."""
        settings = DocumentSchedulerSettings()

        with pytest.raises(FrozenInstanceError):
            settings.enabled = False

    def test_defaults_classmethod(self):
        """defaults() classmethod returns default settings instance."""
        defaults = DocumentSchedulerSettings.defaults()

        assert defaults.enabled is True
        assert defaults.interval_seconds == 1800
        assert defaults.download_pdfs is False
        assert defaults.extract_text is True
        assert defaults.generate_rag is False
        assert defaults.sweep_library_collections is False
        assert defaults.last_run == ""
