import pytest
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__), "..")))

from simulation.sim_ai_settings import AISettingsSimulation

def test_ai_settings_simulation_run():
    mock_client = MagicMock()
    mock_client.wait_for_server.return_value = True
    
    mock_client.get_value.side_effect = lambda key: {
        "current_provider": "gemini",
        "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", "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
        mock_client.set_value.assert_any_call("current_model", "gemini-1.5-flash")
        mock_client.set_value.assert_any_call("current_model", "gemini-2.5-flash-lite")
