import { useSystem } from '@idyllic/react';
import type { CodeReviewer } from '../systems/CodeReviewer';
export default function ReviewerUI() {
const { code, language, issues, suggestions, improved, status, setCode, review } = useSystem<CodeReviewer>();
const isReviewing = status === 'reviewing';
return (
<div className="flex flex-col h-screen p-4">
<div className="mb-4">
<div className="flex gap-2 mb-2">
<select
value={language}
onChange={e => setCode(code, e.target.value)}
className="px-3 py-2 border rounded"
>
<option value="typescript">TypeScript</option>
<option value="python">Python</option>
<option value="go">Go</option>
</select>
<button
onClick={review}
disabled={isReviewing || !code}
className="px-4 py-2 bg-blue-600 text-white rounded disabled:opacity-50"
>
{isReviewing ? 'Reviewing...' : 'Review Code'}
</button>
</div>
<textarea
value={code}
onChange={e => setCode(e.target.value)}
className="w-full h-48 p-3 border rounded font-mono text-sm"
placeholder="Paste your code here..."
/>
</div>
<div className="flex-1 grid grid-cols-3 gap-4">
<Panel title="Issues" content={issues.current} streaming={isReviewing} />
<Panel title="Suggestions" content={suggestions.current} streaming={isReviewing} />
<Panel title="Improved" content={improved.current} streaming={isReviewing} mono />
</div>
</div>
);
}
function Panel({ title, content, streaming, mono }: {
title: string; content: string; streaming: boolean; mono?: boolean;
}) {
return (
<div className="flex flex-col border rounded">
<h3 className="px-3 py-2 bg-gray-100 font-medium border-b">{title}</h3>
<div className={`flex-1 p-3 overflow-auto whitespace-pre-wrap ${mono ? 'font-mono text-sm' : ''}`}>
{content}
{streaming && <span className="animate-pulse">|</span>}
</div>
</div>
);
}