import { create } from 'zustand' import { SplitOptions, ContainerInfo, CodecInfo } from '../types' import { DEFAULT_FORMAT, DEFAULT_OUTPUT_TEMPLATE, DEFAULT_REPLACEMENT_CHAR, DEFAULT_BAD_CHARS, DEFAULT_ALBUM, DEFAULT_COMMENT, DEFAULT_NO_COMMENT, DEFAULT_COMMENT_STREAM, DEFAULT_MERGE_COMMENTS, DEFAULT_COMMENT_SEPARATOR, DEFAULT_DROP_VIDEO, DEFAULT_DROP_SUBS, DEFAULT_NUMBER_TRACKS, DEFAULT_REPLACE_BAD_CHARS, DEFAULT_SKIP_EXISTING, DEFAULT_TRACKLIST_FORMAT, } from '../constants/generated' // We use DEFAULT_FORMAT only as a fallback; container default is null (auto-detect) const DEFAULT_OPTIONS: SplitOptions = { container: null, audio_codec: 'copy', video_codec: 'copy', subtitle_codec: 'copy', video_quality: null, drop_video: DEFAULT_DROP_VIDEO, drop_subs: DEFAULT_DROP_SUBS, number_tracks: DEFAULT_NUMBER_TRACKS, replace_bad_chars: DEFAULT_REPLACE_BAD_CHARS, replacement_char: DEFAULT_REPLACEMENT_CHAR, bad_chars: DEFAULT_BAD_CHARS, skip_existing: DEFAULT_SKIP_EXISTING, output_template: DEFAULT_OUTPUT_TEMPLATE, album: DEFAULT_ALBUM ?? '', comment: DEFAULT_COMMENT ?? '', no_comment: DEFAULT_NO_COMMENT, comment_stream: DEFAULT_COMMENT_STREAM, merge_comments: DEFAULT_MERGE_COMMENTS, comment_separator: DEFAULT_COMMENT_SEPARATOR, tracklist_format: DEFAULT_TRACKLIST_FORMAT, } interface OptionsState { options: SplitOptions containers: ContainerInfo[] codecs: CodecInfo[] compatibility: Record setOptions: (newOptions: Partial) => void setContainers: (containers: ContainerInfo[]) => void setCodecs: (codecs: CodecInfo[]) => void setCompatibility: (compat: Record) => void reset: () => void } export const useOptionsStore = create((set) => ({ options: { ...DEFAULT_OPTIONS }, containers: [], codecs: [], compatibility: {}, setOptions: (newOptions) => set((state) => ({ options: { ...state.options, ...newOptions }, })), setContainers: (containers) => set({ containers }), setCodecs: (codecs) => set({ codecs }), setCompatibility: (compatibility) => set({ compatibility }), reset: () => set({ options: { ...DEFAULT_OPTIONS }, containers: [], codecs: [], compatibility: {}, }), }))