import io
import tomllib
import pytest
import tomli_w
from src.models import WorkspaceProfile


def test_workspace_profile_empty_ini_content_roundtrips():
  profile = WorkspaceProfile(
   name="t",
   ini_content="",
   show_windows={"A": True, "B": False},
   panel_states={"x": 1, "y": 2.0, "z": True},
  )
  d = profile.to_dict()
  buf = io.BytesIO()
  tomli_w.dump({"t": d}, buf)
  buf.seek(0)
  back = tomllib.load(buf)
  loaded = WorkspaceProfile.from_dict("t", back["t"])
  assert loaded.ini_content == ""
  assert loaded.show_windows == {"A": True, "B": False}
  assert loaded.panel_states == {"x": 1, "y": 2.0, "z": True}


def test_workspace_profile_with_actual_ini_content_roundtrips():
  profile = WorkspaceProfile(
   name="real",
   ini_content="[Window][Debug]\nPos=10,20\n",
   show_windows={},
   panel_states={},
  )
  d = profile.to_dict()
  buf = io.BytesIO()
  tomli_w.dump({"real": d}, buf)
  buf.seek(0)
  back = tomllib.load(buf)
  loaded = WorkspaceProfile.from_dict("real", back["real"])
  assert loaded.ini_content == "[Window][Debug]\nPos=10,20\n"
  assert loaded.name == "real"
  assert loaded.show_windows == {}
  assert loaded.panel_states == {}


def test_workspace_profile_bytes_ini_content_rejected_by_toml():
  profile = WorkspaceProfile(
   name="bad",
   ini_content=b"",
   show_windows={},
   panel_states={},
  )
  d = profile.to_dict()
  buf = io.BytesIO()
  with pytest.raises(TypeError, match="bytes"):
   tomli_w.dump({"bad": d}, buf)
