'use client';
import * as React from 'react';
import { Slider } from '@/components/ui/slider';
import { Input } from '@/components/ui/input';
import {
Select,
SelectContent,
SelectItem,
SelectTrigger,
SelectValue,
} from '@/components/ui/select';
import type { ConversionOptions, ConversionFormat } from '@/types/media';
interface ConversionOptionsProps {
inputFormat: ConversionFormat;
outputFormat: ConversionFormat;
options: ConversionOptions;
onOptionsChange: (options: ConversionOptions) => void;
disabled?: boolean;
}
export function ConversionOptionsPanel({
inputFormat,
outputFormat,
options,
onOptionsChange,
disabled = false,
}: ConversionOptionsProps) {
const [isExpanded, setIsExpanded] = React.useState(false);
const handleOptionChange = (key: string, value: any) => {
onOptionsChange({ ...options, [key]: value });
};
const renderVideoOptions = () => (
{/* Video Codec */}
{/* Video Bitrate */}
{options.videoBitrate || '2M'}
handleOptionChange('videoBitrate', `${vals[0]}M`)}
disabled={disabled}
/>
Higher bitrate = better quality, larger file
{/* Resolution */}
{/* FPS */}
{/* Audio Bitrate */}
{options.audioBitrate || '128k'}
handleOptionChange('audioBitrate', `${vals[0]}k`)}
disabled={disabled}
/>
);
const renderAudioOptions = () => (
{/* Audio Codec */}
{/* Bitrate */}
{options.audioBitrate || '192k'}
handleOptionChange('audioBitrate', `${vals[0]}k`)}
disabled={disabled}
/>
{/* Sample Rate */}
{/* Channels */}
);
const renderImageOptions = () => (
{/* Quality */}
{options.imageQuality || 85}%
handleOptionChange('imageQuality', vals[0])}
disabled={disabled}
/>
{/* Width */}
{/* Height */}
);
return (
<>
{outputFormat.category === 'video' && renderVideoOptions()}
{outputFormat.category === 'audio' && renderAudioOptions()}
{outputFormat.category === 'image' && renderImageOptions()}
>
);
}