import { LayoutGrid, Radio, Settings, Users } from "lucide-react" import { useState } from "react" import { useTranslation } from "react-i18next" import { Button } from "@/components/ui/button" import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" import { useBusRouting } from "../../hooks/use-bus-routing" import { useMixerState } from "../../hooks/use-mixer-state" import { GroupStrip } from "../routing/group-strip" import { RoutingMatrix } from "../routing/routing-matrix" import { SendPanel } from "../routing/send-panel" import { MixerConsole } from "./mixer-console" interface MixerWithRoutingProps { className?: string } export function MixerWithRouting({ className }: MixerWithRoutingProps) { const { t } = useTranslation() const [activeTab, setActiveTab] = useState("mixer") const [selectedChannelForSends, setSelectedChannelForSends] = useState(null) const { buses, groups, sends, createBus, createGroup, createSend, deleteBus, deleteGroup, deleteSend, assignChannelToBus, updateSendLevel, setBusMute, setBusSolo, setGroupMute, setGroupSolo, setGroupGain, toggleSendEnabled, toggleSendPre, getChannelSends, } = useBusRouting() const { channels } = useMixerState() const channelIds = channels.map((ch) => ch.id) const handleGroupGainChange = (groupId: string, value: number) => { // Convert 0-100 to 0-2 gain range const gain = (value / 100) * 2 setGroupGain(groupId, gain) } return (
{/* Tab Navigation */} {t("fairlightAudio.mixerWithRouting.tabs.mixer")} {t("fairlightAudio.mixerWithRouting.tabs.routing")} {t("fairlightAudio.mixerWithRouting.tabs.groups")} {t("fairlightAudio.mixerWithRouting.tabs.sends")} {/* Mixer View */}
{/* Main Mixer */}
{/* Group Strips */} {groups.length > 0 && (
{t("fairlightAudio.mixerWithRouting.groups.title")}
{groups.map((group) => ( handleGroupGainChange(group.id, value)} onMute={() => setGroupMute(group.id, !group.isMuted)} onSolo={() => setGroupSolo(group.id, !group.isSolo)} onDelete={() => deleteGroup(group.id)} onEditChannels={() => { setActiveTab("routing") }} /> ))}
)}
{/* Routing Matrix View */} {/* Groups Management View */}

{t("fairlightAudio.mixerWithRouting.groups.channelGroups")}

{groups.length === 0 ? (
{t("fairlightAudio.mixerWithRouting.groups.noGroupsCreated")}
{t("fairlightAudio.mixerWithRouting.groups.noGroupsDescription")}
) : (
{groups.map((group) => (

{group.name}

{t("fairlightAudio.mixerWithRouting.groups.channels")} {group.channelIds.length}
{group.channelIds.join(", ")}
{t("fairlightAudio.mixerWithRouting.groups.bus")} {group.busId.replace("_bus", "")}
))}
)}
{/* Sends Management View */}

{t("fairlightAudio.mixerWithRouting.sends.title")}

{selectedChannelForSends && ( )}
{/* Channel List */}

{t("fairlightAudio.mixerWithRouting.sends.channels")}

{channelIds.map((channelId) => { const channelSends = getChannelSends(channelId) return ( ) })}
{/* Send Panel */}
{selectedChannelForSends ? ( createSend(selectedChannelForSends, busId, level, isPre)} onUpdateSendLevel={updateSendLevel} onToggleSendPre={toggleSendPre} onToggleSendEnabled={toggleSendEnabled} onDeleteSend={deleteSend} /> ) : (
{t("fairlightAudio.mixerWithRouting.sends.selectChannel")}
)}
) }