import { SerializedNodes } from '@craftjs/core';

export function summarizeCanvas(state: SerializedNodes, maxChars = 6000): string {
  const root = state['ROOT'];
  if (!root) return '(empty canvas)';
  const lines: string[] = [];
  const visit = (id: string, depth: number) => {
    const node = state[id];
    if (!node) return;
    const indent = '  '.repeat(depth);
    const type = typeof node.type === 'object' ? (node.type as any).resolvedName : String(node.type);
    const props = node.props || {};
    const aiName = (props as any).aiName ?? '';
    const nodeId = (props as any).node_id ?? id;
    const interesting: string[] = [];
    for (const [k, v] of Object.entries(props)) {
      if (k === 'aiName' || k === 'node_id' || k === 'style') continue;
      if (v == null) continue;
      const repr = typeof v === 'string' ? v : JSON.stringify(v);
      const truncated = repr.length > 60 ? repr.slice(0, 57) + '…' : repr;
      interesting.push(`${k}=${truncated}`);
      if (interesting.length >= 3) break;
    }
    lines.push(`${indent}- ${type} id=${nodeId} name="${aiName}" {${interesting.join(', ')}}`);
    if (type === 'HtmlBlock') return;
    for (const childId of node.nodes || []) visit(childId, depth + 1);
  };
  visit('ROOT', 0);
  let out = lines.join('\n');
  if (out.length > maxChars) out = out.slice(0, maxChars - 30) + '\n… (truncated)';
  return out;
}
