import { useTranslation } from "react-i18next"
import { Dialog, DialogContent, DialogHeader, DialogTitle } from "@/components/ui/dialog"
import { MissingFilesModal } from "@/features/app-state/components/missing-files-modal"
import { CameraCaptureModal } from "@/features/camera-capture"
import { ColorGradingSavePresetModal } from "@/features/color-grading/components/controls/color-grading-save-preset-modal"
import { EffectDetailModal } from "@/features/effects/components/effect-detail-modal"
import { ExportModal } from "@/features/export"
import { MidiConfigurationModalComponent } from "@/features/fairlight-audio/components/midi/midi-configuration-modal-component"
import { MidiLearnModal } from "@/features/fairlight-audio/components/midi/midi-learn-modal"
import { MidiMappingEditorModal } from "@/features/fairlight-audio/components/midi/midi-mapping-editor-modal"
import { KeyboardShortcutsModal } from "@/features/keyboard-shortcuts"
import { CacheSettingsModal } from "@/features/media/components/cache-settings-modal"
import { PersonFormModal } from "@/features/person-identification/components/person-form-modal"
import { ProjectSettingsModal } from "@/features/project-settings"
import { SubtitleAIToolsModal } from "@/features/subtitles/components/subtitle-ai-tools-modal"
import { AIMarkerSettingsModal } from "@/features/timeline/components/ai-markers/ai-marker-settings-modal"
import { AudioEffectsEditorModal } from "@/features/timeline/components/audio-effects-editor-modal"
import { SubtitleEditorModal } from "@/features/timeline/components/subtitle-editor-modal"
import { UserSettingsModal } from "@/features/user-settings"
import { CacheStatisticsModal } from "@/features/video-compiler/components/cache-statistics-modal"
import { VoiceRecordModal } from "@/features/voice-recording"
import { ModalType, useModal } from "../services"
/**
* Контейнер для модальных окон
*/
export function ModalContainer() {
const { modalType, modalData, isOpen, closeModal } = useModal()
const { t } = useTranslation() // Получаем функцию перевода
// Рендерим только активное модальное окно с помощью switch
const renderAllModals = () => {
switch (modalType) {
case "project-settings":
return
case "keyboard-shortcuts":
return
case "user-settings":
return
case "camera-capture":
return
case "voice-recording":
return
case "export":
return
case "cache-settings":
return
case "cache-statistics":
return
case "subtitle-editor":
return
case "person-form":
return
case "missing-files":
return
case "ai-marker-settings":
return
case "subtitle-ai-tools":
return
case "audio-effects":
return
case "midi-learn":
return
case "midi-mapping":
return
case "midi-configuration":
return
case "effect-detail":
return
case "color-grading":
return
default:
return null
}
}
const getDialogClassForType = (modalType: ModalType): string => {
switch (modalType) {
case "camera-capture":
return "h-[max(600px,min(70vh,800px))] w-[max(700px,min(80vw,900px))]"
case "voice-recording":
return "h-[max(500px,min(60vh,700px))] w-[max(600px,min(70vw,800px))]"
case "export":
return "h-[max(700px,min(80vh,900px))] w-[max(800px,min(90vw,1200px))]"
case "project-settings":
return "h-[450px] w-[500px]"
case "user-settings":
return "h-[700px] w-[600px]"
case "keyboard-shortcuts":
return "h-[max(600px,min(70vh,1000px))] w-[1200px]"
case "cache-settings":
return "h-[max(700px,min(80vh,900px))] w-[666px]"
case "cache-statistics":
return "h-[max(600px,min(70vh,800px))] w-[666px]"
case "subtitle-editor":
return "h-[max(600px,min(70vh,800px))] w-[max(600px,min(70vw,800px))]"
case "person-form":
return "h-[max(500px,min(60vh,700px))] w-[max(500px,min(60vw,600px))]"
case "missing-files":
return "h-[max(600px,min(70vh,800px))] w-[max(700px,min(80vw,900px))]"
case "ai-marker-settings":
return "h-[max(600px,min(70vh,700px))] w-[max(500px,min(60vw,600px))]"
case "subtitle-ai-tools":
return "h-[max(500px,min(60vh,600px))] w-[max(500px,min(60vw,600px))]"
case "audio-effects":
return "max-w-3xl max-h-[80vh] overflow-y-auto"
case "midi-learn":
return "sm:max-w-md"
case "midi-mapping":
return "sm:max-w-md"
case "midi-configuration":
return "max-w-2xl max-h-[80vh] overflow-hidden"
case "effect-detail":
return "max-w-4xl max-h-[90vh] overflow-y-auto"
case "color-grading":
return "bg-[#2D2D30] border-[#464647]"
default:
return "h-[max(600px,min(50vh,800px))]"
}
}
// Функция для получения заголовка модального окна с использованием i18n
const getModalTitle = () => {
switch (modalType) {
case "project-settings":
return t("modals.projectSettings.title", "Настройки проекта")
case "keyboard-shortcuts":
return t("modals.keyboardShortcuts.title", "Горячие клавиши")
case "user-settings":
return t("modals.userSettings.title", "Настройки пользователя")
case "camera-capture":
return t("modals.cameraCapture.title", "Запись с камеры")
case "voice-recording":
return t("modals.voiceRecording.title", "Запись голоса")
case "export":
return t("modals.export.title", "Экспорт")
case "cache-settings":
return t("modals.cacheSettings.title", "Настройки кэша")
case "cache-statistics":
return t("modals.cacheStatistics.title", "Статистика кэша")
case "subtitle-editor":
return modalData?.subtitle
? t("modals.subtitleEditor.titleEdit", "Редактировать субтитр")
: t("modals.subtitleEditor.titleAdd", "Добавить субтитр")
case "person-form":
return modalData?.person
? t("modals.personForm.titleEdit", "Редактировать персону")
: t("modals.personForm.titleAdd", "Создать персону")
case "missing-files":
return t("modals.missingFiles.title", "Отсутствующие медиафайлы")
case "ai-marker-settings":
return t("modals.aiMarkerSettings.title", "Настройки AI маркеров")
case "subtitle-ai-tools":
return t("modals.subtitleAITools.title", "Автоматическая транскрипция")
case "audio-effects":
return t("modals.audioEffects.title", "Аудио эффекты")
case "midi-learn":
return t("modals.midiLearn.title", "Обучение MIDI")
case "midi-mapping":
return t("modals.midiMapping.title", "Редактор MIDI маппинга")
case "midi-configuration":
return t("modals.midiConfiguration.title", "Настройки MIDI")
case "effect-detail":
return t("modals.effectDetail.title", "Детали эффекта")
case "color-grading":
return t("modals.colorGrading.title", "Сохранить пресет цветокоррекции")
case "none":
return ""
default:
return ""
}
}
const dialogClass = modalData?.dialogClass ?? getDialogClassForType(modalType)
return (
)
}