import { Link } from 'react-router-dom'; import type { HeroVideoSectionPayload } from '@homaroma/types'; import { useTranslation } from 'react-i18next'; import { getLocalizedField } from '../utils/localization'; interface DynamicHeroVideoProps { payload: HeroVideoSectionPayload; } export default function DynamicHeroVideo({ payload }: DynamicHeroVideoProps) { const { t, i18n } = useTranslation(); const lang = i18n.language; const tagline = getLocalizedField(payload.tagline, lang); const title = getLocalizedField(payload.title, lang); const description = getLocalizedField(payload.description, lang); const buttonText = getLocalizedField(payload.buttonText, lang); const secondaryButtonText = getLocalizedField(payload.secondaryButtonText, lang); const videoUrl = payload.videoUrl; const posterImageUrl = payload.posterImageUrl; const overlayOpacity = typeof payload.overlayOpacity === 'number' ? payload.overlayOpacity : 40; const height = payload.height || 'large'; const focalPoint = typeof payload.focalPoint === 'object' && payload.focalPoint ? (payload.focalPoint as { x: string, y: string }) : undefined; const getHeightClass = (h: string) => { switch (h) { case 'full': return 'h-screen'; case 'medium': return 'h-[60vh] min-h-[400px]'; case 'large': default: return 'h-[85vh] min-h-[550px]'; } }; const renderTitle = (text: string) => { if (!text) return null; return text.split('[').map((part, i) => { if (part.includes(']')) { const [accent, rest] = part.split(']'); return ( {accent} {rest} ); } return {part}; }); }; return (
{/* Background Video */} {videoUrl ? ( ) : posterImageUrl ? ( Hero Poster ) : null} {/* Customizable Overlay Opacity */}
{/* Overlay Typography Content */}
{tagline && (

{tagline}

)}

{renderTitle(title) || renderTitle(t('hero.defaultTitle'))}

{description && (

{description}

)} {/* Dual Action Buttons */} {(buttonText || secondaryButtonText) && (
{buttonText && payload.buttonLink && ( {buttonText} )} {secondaryButtonText && payload.secondaryButtonLink && ( {secondaryButtonText} )}
)}
); }