from typing import Dict, Any

from src.models import ContextPreset
from src.result_types import Result, ErrorInfo, ErrorKind


class ContextPresetManager:
 """Manages context presets within the project dictionary (manual_slop.toml)."""

 def load_all(self, project_dict: Dict[str, Any]) -> Result[Dict[str, ContextPreset]]:
  """Loads all context presets from the project dictionary."""
  presets: Dict[str, ContextPreset] = {}
  errors: list[ErrorInfo] = []
  presets_data = project_dict.get("context_presets", {})
  for name, data in presets_data.items():
   try:
    presets[name] = ContextPreset.from_dict(name, data)
   except (ValueError, KeyError, TypeError) as e:
    errors.append(ErrorInfo(kind=ErrorKind.INTERNAL, message=str(e), source=f"context_presets.load_all[{name}]", original=e))
  return Result(data=presets, errors=errors)

 def save_preset(self, project_dict: Dict[str, Any], preset: ContextPreset) -> None:
  """Saves a context preset into the project dictionary."""
  if "context_presets" not in project_dict:
   project_dict["context_presets"] = {}
  project_dict["context_presets"][preset.name] = preset.to_dict()

 def delete_preset(self, project_dict: Dict[str, Any], name: str) -> None:
  """Deletes a context preset from the project dictionary."""
  if "context_presets" in project_dict and name in project_dict["context_presets"]:
   del project_dict["context_presets"][name]
