#
# Copyright 2026 The Dapr Authors
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#     http://www.apache.org/licenses/LICENSE-2.0
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

"""Integration tests for 06-agent-mcp-client-sse example."""

import pytest
from tests.integration.quickstarts.conftest import (
    run_quickstart_or_examples_script,
    MCPServerContext,
)


@pytest.mark.integration
class TestMCPClientSSEQuickstart:
    """Integration tests for 06-agent-mcp-client-sse example."""

    @pytest.fixture(autouse=True)
    def setup(self, examples_dir, openai_api_key, is_ollama):
        """Setup test environment."""
        self.quickstart_dir = examples_dir / "06-agent-mcp-client-sse"
        self.env = {"OPENAI_API_KEY": openai_api_key}
        if is_ollama:
            import os

            self.env["OPENAI_MODEL"] = os.environ["OLLAMA_MODEL"]
            self.env["OPENAI_BASE_URL"] = os.environ["OLLAMA_ENDPOINT"]

    def test_mcp_agent_sse(self, dapr_runtime):  # noqa: ARG002
        """Test MCP agent with SSE transport (app.py).

        This test starts the MCP server first, then runs the agent.
        The MCP server must be running on port 8000 for the agent to connect.

        Note: dapr_runtime parameter ensures Dapr is initialized before this test runs.
        """
        with MCPServerContext(
            self.quickstart_dir,
            server_type="sse",
            port=8000,
            env=self.env,
        ):
            # Run the agent with a curl trigger to test the MCP connection
            script = self.quickstart_dir / "app.py"
            result = run_quickstart_or_examples_script(
                script,
                cwd=self.quickstart_dir,
                env=self.env,
                timeout=180,
                use_dapr=True,
                app_id="mcp-agent-sse",
                app_port=8001,
                trigger_curl={
                    "url": "http://localhost:8001/agent/run",
                    "method": "POST",
                    "data": {"task": "What is the weather in New York?"},
                    "headers": {"Content-Type": "application/json"},
                    "wait_seconds": 10,  # Give agent time to connect to MCP server and start
                },
            )

            assert result.returncode == 0, (
                f"Quickstart failed with return code {result.returncode}.\n"
                f"STDOUT:\n{result.stdout}\n"
                f"STDERR:\n{result.stderr}"
            )
            # expect some output
            assert len(result.stdout) > 0 or len(result.stderr) > 0
            # Verify MCP connection succeeded (should not see "Failed to load MCP tools" error)
            assert "Failed to load MCP tools via SSE" not in result.stderr, (
                "MCP server connection failed. Check that server started correctly."
            )
