import { useState, useEffect } from "react"; import { CHARACTERS } from "../assets/characters"; import { t } from "../utils/i18n"; import CharacterBackdrop from "./CharacterBackdrop"; import { getTheme, getSurface } from "../utils/themes"; export default function CharacterSelect({ onSelect, language = "english", darkMode }) { const [selected, setSelected] = useState(null); const [previewing, setPreviewing] = useState(null); const theme = getTheme(selected, darkMode); useEffect(() => { document.body.style.background = theme.bgGradient; document.body.style.transition = "background 0.5s ease"; }, [theme.bgGradient]); const handlePreview = async (charId) => { setPreviewing(charId); try { const res = await fetch(`https://anabaena-vaaksiddhi.hf.space/speak/intro/${charId}`); const blob = await res.blob(); const url = URL.createObjectURL(blob); const audio = new Audio(url); audio.play(); audio.onended = () => setPreviewing(null); } catch { setPreviewing(null); } }; return (

{t(language, "chooseCharacter")}

{selected ? `${CHARACTERS[selected][language === "hindi" ? "tagline_hindi" : language === "kannada" ? "tagline_kannada" : "tagline"] || CHARACTERS[selected].tagline} ✨` : t(language, "chooseCharacterSub")}

{Object.values(CHARACTERS).map((char, i) => { const isSelected = selected === char.id; const isPreviewing = previewing === char.id; const ct = getTheme(char.id, darkMode); return (
setSelected(char.id)} style={{ background: isSelected ? ct.card : getSurface(darkMode, 0.92), border: `2px solid ${isSelected ? ct.accent : "rgba(0,0,0,0.1)"}`, borderRadius: "22px", padding: "14px 20px 14px 14px", cursor: "pointer", transition: "all 0.35s ease", display: "flex", flexDirection: "row", alignItems: "center", gap: "16px", position: "relative", overflow: "hidden", boxShadow: isSelected ? `0 4px 24px ${ct.accent}33` : "0 3px 14px rgba(0,0,0,0.1)", }}> {isSelected && (
)} {char.name}

{char.name}

{char[language === "hindi" ? "tagline_hindi" : language === "kannada" ? "tagline_kannada" : "tagline"] || char.tagline}

{char.type}
{isSelected && (
)}
); })}
); }