import { Info, Loader2, Music, Trash2 } from "lucide-react" import { useState } from "react" import { useTranslation } from "react-i18next" import { Button } from "@/components/ui/button" import { Card } from "@/components/ui/card" import { Label } from "@/components/ui/label" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" import { useModal } from "@/features/modals/services" import { useMidi } from "../../hooks/use-midi" import { MidiDevice, MidiMessage } from "../../services/midi/midi-engine" import { MidiMappingEditor } from "./midi-mapping-editor" import { MidiRouterView } from "./midi-router-view" export function MidiSetup() { const { t } = useTranslation() const { openModal } = useModal() const { devices, inputDevices, outputDevices, mappings, isInitialized, error, addMapping, removeMapping, updateMapping, } = useMidi() const [selectedInput, setSelectedInput] = useState("") const [selectedOutput, setSelectedOutput] = useState("") // Убираем локальное состояние диалогов, так как теперь они управляются через ModalContainer if (!isInitialized) { return (

{t("fairlightAudio.midi.setup.initializing")}

) } if (error) { return (

{t("fairlightAudio.midi.setup.error")}

{error}

) } return (
{t("fairlightAudio.midi.setup.tabs.devices")} {t("fairlightAudio.midi.setup.tabs.mappings")} {t("fairlightAudio.midi.setup.tabs.router")} {/* Input Devices */}

{t("fairlightAudio.midi.setup.devices.inputDevices")}

{inputDevices.length === 0 ? (

{t("fairlightAudio.midi.setup.devices.noInputDevices")}

) : (
{inputDevices.map((device) => ( ))}
)}
{/* Output Devices */}

{t("fairlightAudio.midi.setup.devices.outputDevices")}

{outputDevices.length === 0 ? (

{t("fairlightAudio.midi.setup.devices.noOutputDevices")}

) : (
{outputDevices.map((device) => ( ))}
)}
{/* Default Device Selection */}

{t("fairlightAudio.midi.setup.devices.defaultDevices")}

{t("fairlightAudio.midi.setup.mappings.title")}

{mappings.length === 0 ? (

{t("fairlightAudio.midi.setup.mappings.noMappings")}

{t("fairlightAudio.midi.setup.mappings.addFirstMapping")}

) : (
{mappings.map((mapping) => (

{mapping.targetParameter}

{devices.find((d) => d.id === mapping.deviceId)?.name || t("fairlightAudio.midi.setup.devices.unknownDevice")}{" "} •{mapping.messageType.toUpperCase()} {mapping.controller !== undefined && ` CC${mapping.controller}`} {mapping.channel && ` CH${mapping.channel}`}

updateMapping(mapping.id, updates)} />
))}
)}
) } function DeviceItem({ device }: { device: MidiDevice }) { return (

{device.name}

{device.manufacturer}

) }