"use client" import { useState, useEffect } from "react" import { Dialog, DialogContent, DialogHeader, DialogTitle } from "@/components/ui/dialog" import { Button } from "@/components/ui/button" import { AlertCircle, CheckCircle2 } from "lucide-react" import { io, type Socket } from "socket.io-client" interface ScriptTerminalModalProps { open: boolean onClose: () => void scriptPath: string scriptName: string params?: Record title: string description: string } interface WebInteraction { type: "yesno" | "menu" | "msgbox" | "input" id: string title: string text: string options?: string[] } export function ScriptTerminalModal({ open, onClose, scriptPath, scriptName, params = {}, title, description, }: ScriptTerminalModalProps) { const [socket, setSocket] = useState(null) const [sessionId] = useState(() => Math.random().toString(36).substring(7)) const [terminalOutput, setTerminalOutput] = useState("") const [isRunning, setIsRunning] = useState(false) const [isComplete, setIsComplete] = useState(false) const [exitCode, setExitCode] = useState(null) const [interaction, setInteraction] = useState(null) useEffect(() => { if (!open) return const newSocket = io("http://localhost:8008", { transports: ["websocket"], reconnection: true, }) newSocket.on("connect", () => { console.log("[v0] WebSocket connected") // Ejecutar el script newSocket.emit("execute_script", { session_id: sessionId, script_path: scriptPath, script_name: scriptName, params, }) setIsRunning(true) }) newSocket.on("script_output", (data: { line: string }) => { setTerminalOutput((prev) => prev + data.line + "\n") }) newSocket.on("web_interaction", (data: WebInteraction) => { console.log("[v0] Web interaction received:", data) setInteraction(data) }) newSocket.on("script_complete", (data: { exit_code: number }) => { console.log("[v0] Script complete, exit code:", data.exit_code) setIsRunning(false) setIsComplete(true) setExitCode(data.exit_code) }) setSocket(newSocket) return () => { newSocket.disconnect() } }, [open, sessionId, scriptPath, scriptName, params]) const handleInteractionResponse = (value: string) => { if (!socket || !interaction) return console.log("[v0] Sending interaction response:", value) socket.emit("interaction_response", { session_id: sessionId, interaction_id: interaction.id, value, }) // Escribir la respuesta en la terminal setTerminalOutput((prev) => prev + `\n> ${value}\n`) setInteraction(null) } return ( <> {isRunning && ⚙️} {isComplete && exitCode === 0 && } {isComplete && exitCode !== 0 && } {title}

{description}

{terminalOutput}
{isRunning && _}
{isComplete && (
{exitCode === 0 ? "✓ Script completed successfully" : `✗ Script failed with exit code ${exitCode}`}
)}
Session ID: {sessionId}
{interaction && ( setInteraction(null)}> {interaction.title}

{interaction.text}

{interaction.type === "yesno" && ( <> )} {interaction.type === "msgbox" && }
)} ) }