import React, { useMemo, useState } from 'react'; import { ArrowLeft } from 'lucide-react'; import { Button } from '../ui'; import { deriveVariables, type WorkflowVariable } from '../../utils/workflowTemplate'; import { useWorkflows, type Workflow } from '../../contexts/WorkflowsContext'; interface WorkflowBuilderProps { /** Existing workflow to edit, or null to create a new one. */ workflow: Workflow | null; onClose: () => void; } type VarMeta = Record>>; const fieldClass = 'w-full rounded-md border border-app-border bg-app-surface px-3 py-2 text-sm text-app-text outline-none transition placeholder:text-app-muted focus:border-brand focus:ring-2 focus:ring-brand/20'; const WorkflowBuilder: React.FC = ({ workflow, onClose }) => { const { createWorkflow, updateWorkflow } = useWorkflows(); const [title, setTitle] = useState(workflow?.title ?? ''); const [description, setDescription] = useState(workflow?.description ?? ''); const [template, setTemplate] = useState(workflow?.template ?? ''); const [varMeta, setVarMeta] = useState(() => { const meta: VarMeta = {}; workflow?.variables.forEach((variable) => { meta[variable.key] = { label: variable.label, placeholder: variable.placeholder, default: variable.default, required: variable.required, }; }); return meta; }); const variables = useMemo(() => { const existing: WorkflowVariable[] = Object.entries(varMeta).map(([key, meta]) => ({ key, label: meta.label ?? key, placeholder: meta.placeholder, default: meta.default, required: meta.required, })); return deriveVariables(template, existing); }, [template, varMeta]); const setMeta = (key: string, patch: Partial>) => { setVarMeta((prev) => ({ ...prev, [key]: { ...prev[key], ...patch } })); }; const insertVariable = () => { const next = `var${variables.length + 1}`; setTemplate((prev) => `${prev}{{${next}}}`); }; const canSave = title.trim().length > 0 && template.trim().length > 0; const save = () => { if (!canSave) return; const input = { title: title.trim(), description: description.trim() || undefined, template: template.trim(), variables }; if (workflow && workflow.scope === 'user') { updateWorkflow(workflow.id, input); } else { createWorkflow(input); } onClose(); }; return (