"""
ANTI-SIMPLIFICATION: These tests verify the Simulation of AI Settings interactions.
They MUST NOT be simplified. They ensure that changes to provider and model
selections are properly simulated and verified via the ApiHookClient.
"""
from unittest.mock import MagicMock, patch
import os
import sys

# Ensure project root is in path
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "src")))

from simulation.sim_ai_settings import AISettingsSimulation

def test_ai_settings_simulation_run() -> None:
 """
 
  
   Verifies that AISettingsSimulation correctly cycles through models
   to test the settings UI components.
 """
 mock_client = MagicMock()
 mock_client.wait_for_server.return_value = True
 mock_client.get_value.side_effect = lambda key: {
  "current_provider": "gemini_cli",
  "current_model": "gemini-2.5-flash-lite"
 }.get(key)
 with patch('simulation.sim_base.WorkflowSimulator') as mock_sim_class:
  mock_sim = MagicMock()
  mock_sim_class.return_value = mock_sim
  sim = AISettingsSimulation(mock_client)
  # Override the side effect after initial setup if needed or just let it return the same for simplicity
  # Actually, let's use a side effect that updates
  vals = {"current_provider": "gemini_cli", "current_model": "gemini-2.5-flash-lite"}
  def side_effect(key):
   return vals.get(key)

  def set_side_effect(key, val):
   vals[key] = val
  mock_client.get_value.side_effect = side_effect
  mock_client.set_value.side_effect = set_side_effect
  sim.run()
  # Verify calls
  # ANTI-SIMPLIFICATION: Assert that specific models were set during simulation
  mock_client.set_value.assert_any_call("current_model", "gemini-2.0-flash")
  mock_client.set_value.assert_any_call("current_model", "gemini-2.5-flash-lite")