import pytest
import inspect
from src import models


def test_ui_summary_only_not_in_projects_panel():
 import src.gui_2 as gui_2

 source = inspect.getsource(gui_2.render_projects_panel)
 assert "ui_summary_only" not in source, (
  "ui_summary_only checkbox should be removed from Projects panel"
 )
 assert "Summary Only" not in source, (
  "Summary Only label should be removed from Projects panel"
 )


def test_ui_summary_only_not_in_app_controller_projects():
 import src.app_controller as app_controller

 source = inspect.getsource(app_controller.AppController)
 assert "ui_summary_only" not in source, (
  "ui_summary_only should be removed from AppController"
 )


def test_file_item_has_per_file_flags():
 item = models.FileItem(path="test.py")
 assert hasattr(item, "auto_aggregate")
 assert hasattr(item, "force_full")
 assert item.auto_aggregate is True
 assert item.force_full is False


def test_file_item_serialization_with_flags():
 item = models.FileItem(path="test.py", auto_aggregate=False, force_full=True)
 data = item.to_dict()

 assert data["auto_aggregate"] is False
 assert data["force_full"] is True

 restored = models.FileItem.from_dict(data)
 assert restored.auto_aggregate is False
 assert restored.force_full is True


def test_project_without_summary_only_loads():
 proj = {"project": {"name": "test", "paths": []}}
 assert proj.get("project", {}).get("summary_only") is None


def test_aggregate_from_items_respects_auto_aggregate():
 from pathlib import Path
 from src import aggregate

 items = [
  {
   "path": Path("file1.py"),
   "entry": "file1.py",
   "content": "print('hello')",
   "auto_aggregate": True,
   "force_full": False,
  },
  {
   "path": Path("file2.py"),
   "entry": "file2.py",
   "content": "print('world')",
   "auto_aggregate": False,
   "force_full": False,
  },
 ]

 result = aggregate._build_files_section_from_items(items)
 assert "file1.py" in result
 assert "file2.py" not in result
