from __future__ import annotations

from typing import TYPE_CHECKING

from django.core.management import call_command

if TYPE_CHECKING:
    from pytest_mock import MockerFixture

_COMPACT = "documents.management.commands.document_llmindex.llm_index_compact"
_INDEX = "documents.management.commands.document_llmindex.llmindex_index"
_MIGRATE = "documents.management.commands.document_llmindex.llm_index_migrate"


class TestDocumentLlmindexCommand:
    def test_compact_calls_llm_index_compact(self, mocker: MockerFixture) -> None:
        mock_compact = mocker.patch(_COMPACT)
        call_command("document_llmindex", "compact")
        mock_compact.assert_called_once_with()

    def test_migrate_calls_llm_index_migrate(self, mocker: MockerFixture) -> None:
        mock_migrate = mocker.patch(_MIGRATE)
        call_command("document_llmindex", "migrate")
        mock_migrate.assert_called_once_with()

    def test_rebuild_calls_llmindex_index_with_rebuild_true(
        self,
        mocker: MockerFixture,
    ) -> None:
        mock_index = mocker.patch(_INDEX)
        call_command("document_llmindex", "rebuild")
        mock_index.assert_called_once()
        assert mock_index.call_args.kwargs["rebuild"] is True

    def test_update_calls_llmindex_index_with_rebuild_false(
        self,
        mocker: MockerFixture,
    ) -> None:
        mock_index = mocker.patch(_INDEX)
        call_command("document_llmindex", "update")
        mock_index.assert_called_once()
        assert mock_index.call_args.kwargs["rebuild"] is False
