import { Terminal, Download, Loader2, AlertTriangle } from 'lucide-react'
import { useScriptGeneratorStore } from '@/store/scriptGeneratorStore'
import { usePermissions } from '@/hooks/usePermissions'
import { ScriptParameterForm } from './ScriptParameterForm'
import { ScriptPreview } from './ScriptPreview'
export function ScriptGeneratorPanel() {
const selectedTemplate = useScriptGeneratorStore(s => s.selectedTemplate)
const isLoadingDetail = useScriptGeneratorStore(s => s.isLoadingDetail)
const generatedScript = useScriptGeneratorStore(s => s.generatedScript)
const generationWarnings = useScriptGeneratorStore(s => s.generationWarnings)
const isGenerating = useScriptGeneratorStore(s => s.isGenerating)
const generateError = useScriptGeneratorStore(s => s.generateError)
const generate = useScriptGeneratorStore(s => s.generate)
const { isEngineer } = usePermissions()
const canGenerate = isEngineer
// No template selected
if (!selectedTemplate && !isLoadingDetail) {
return (
Select a template to get started
)
}
// Loading template detail
if (isLoadingDetail) {
return (
)
}
if (!selectedTemplate) return null
const handleDownload = () => {
if (!generatedScript) return
const blob = new Blob([generatedScript], { type: 'text/plain' })
const url = URL.createObjectURL(blob)
const a = document.createElement('a')
a.href = url
a.download = `${selectedTemplate.slug}.ps1`
document.body.appendChild(a)
a.click()
document.body.removeChild(a)
URL.revokeObjectURL(url)
}
return (
{/* Header */}
{selectedTemplate.name}
{selectedTemplate.description && (
{selectedTemplate.description}
)}
{/* Parameter form */}
{/* Warnings */}
{generationWarnings.length > 0 && (
{generationWarnings.map((w, i) => (
{w}
))}
)}
{/* Preview */}
{/* Action bar */}
{/* Generate error */}
{generateError && (
{generateError}
)}
)
}