/* eslint-disable react-hooks/exhaustive-deps */ "use client" import useUserDataStore from "@/stores/userDataStore"; import { useEffect, useMemo } from "react"; import { motion } from "framer-motion"; import LightconeBar from '../lightconeBar' import { calcPromotion, calcRarity, replaceByParam } from '@/helper'; import { getSkillTree } from '@/helper/getSkillTree'; import { useTranslations } from 'next-intl'; import ParseText from '../parseText'; import useLocaleStore from '@/stores/localeStore'; import useModelStore from '@/stores/modelStore'; import Image from 'next/image'; import useCurrentDataStore from "@/stores/currentDataStore"; import useDetailDataStore from "@/stores/detailDataStore"; import { getLocaleName } from "@/helper/getName"; export default function AvatarInfo() { const { avatarSelected, setResetDataLightcone } = useCurrentDataStore() const { avatars, setAvatars, setAvatar } = useUserDataStore() const { isOpenLightcone, setIsOpenLightcone } = useModelStore() const { mapLightCone, baseType } = useDetailDataStore() const transI18n = useTranslations("DataPage") const { locale } = useLocaleStore(); const lightcone = useMemo(() => { if (!avatarSelected) return null; const avatar = avatars[avatarSelected.ID]; return avatar?.profileList[avatar.profileSelect]?.lightcone || null; }, [avatarSelected, avatars]); const lightconeDetail = useMemo(() => { if (!mapLightCone || !lightcone?.item_id) return null; return mapLightCone?.[lightcone.item_id.toString()] || null; }, [lightcone, mapLightCone]); const handleShow = (modalId: string) => { const modal = document.getElementById(modalId) as HTMLDialogElement | null; if (modal) { setIsOpenLightcone(true); modal.showModal(); } }; // Close modal handler const handleCloseModal = (modalId: string) => { setIsOpenLightcone(false); const modal = document.getElementById(modalId) as HTMLDialogElement | null; if (modal) { modal.close(); } }; // Handle ESC key to close modal useEffect(() => { if (!isOpenLightcone) { handleCloseModal("action_detail_modal"); return; } const handleEscKey = (event: KeyboardEvent) => { if (event.key === 'Escape' && isOpenLightcone) { handleCloseModal("action_detail_modal"); } }; window.addEventListener('keydown', handleEscKey); return () => window.removeEventListener('keydown', handleEscKey); }, [isOpenLightcone]); return (
{avatarSelected && avatars[avatarSelected?.ID.toString() || ""] && (
{/* Header */}

{transI18n("characterSettings")}

{/* Level Control */}

{transI18n("levelConfiguration")}

{ const newLevel = Math.min(80, Math.max(1, parseInt(e.target.value) || 1)); setAvatars({ ...avatars, [avatarSelected?.ID.toString() || ""]: { ...avatars[avatarSelected?.ID.toString() || ""], level: newLevel, promotion: calcPromotion(newLevel) } }); }} className="input input-bordered w-full pr-16 font-mono" placeholder={transI18n("placeholderLevel")} />
{ setAvatars({ ...avatars, [avatarSelected?.ID.toString() || ""]: { ...avatars[avatarSelected?.ID.toString() || ""], level: 80, promotion: calcPromotion(80) } }); }} className="absolute right-3 top-1/2 -translate-y-1/2 text-base-content/60 cursor-pointer"> {transI18n("max")}
{ const newLevel = Math.min(80, Math.max(1, parseInt(e.target.value) || 1)); setAvatars({ ...avatars, [avatarSelected?.ID.toString() || ""]: { ...avatars[avatarSelected?.ID.toString() || ""], level: newLevel, promotion: calcPromotion(newLevel) } }); }} className="range range-info range-sm w-full" />
{/* Energy Control */}

{transI18n("ultimateEnergy")}

{ if (!avatars[avatarSelected?.ID.toString() || ""]?.can_change_sp) return const newSpValue = Math.min(avatars[avatarSelected?.ID.toString() || ""]?.sp_max, Math.max(0, parseInt(e.target.value) || 0)); setAvatars({ ...avatars, [avatarSelected?.ID.toString() || ""]: { ...avatars[avatarSelected?.ID.toString() || ""], sp_value: newSpValue } }); }} className="range range-warning range-sm w-full" />
0% {((avatars[avatarSelected?.ID.toString() || ""]?.sp_value / avatars[avatarSelected?.ID.toString() || ""]?.sp_max) * 100).toFixed(1)}% 100%
{/* Technique Toggle */}

{transI18n("battleConfiguration")}

{transI18n("techniqueNote")}
{/* Enhancement Selection */} {avatarSelected?.Enhanced && (

{transI18n("enhancement")}

{transI18n("enhancedNote")}
)}
{/* Header */}

{transI18n("lightconeEquipment")}

{lightcone && lightconeDetail ? (
{/* Level & Rank Controls */}

{transI18n("lightconeSettings")}

{/* Level Input */}
{ const newLightconeLevel = Math.min(80, Math.max(1, parseInt(e.target.value) || 1)) const newLightcone = { ...lightcone, level: newLightconeLevel, promotion: calcPromotion(newLightconeLevel) } const newAvatar = { ...avatars[avatarSelected.ID] } newAvatar.profileList[newAvatar.profileSelect].lightcone = newLightcone setAvatar(newAvatar) }} className="input input-bordered w-full pr-16 font-mono" placeholder={transI18n("placeholderLevel")} />
{ const newLightcone = { ...lightcone, level: 80, promotion: calcPromotion(80) } const newAvatar = { ...avatars[avatarSelected.ID] } newAvatar.profileList[newAvatar.profileSelect].lightcone = newLightcone setAvatar(newAvatar) }} className="absolute right-3 top-1/2 -translate-y-1/2 text-base-content/60 cursor-pointer"> {transI18n("max")}
{ const newLightconeLevel = Math.min(80, Math.max(1, parseInt(e.target.value) || 1)) const newLightcone = { ...lightcone, level: newLightconeLevel, promotion: calcPromotion(newLightconeLevel) } const newAvatar = { ...avatars[avatarSelected.ID] } newAvatar.profileList[newAvatar.profileSelect].lightcone = newLightcone setAvatar(newAvatar) }} className="range range-primary range-sm" />
{/* Rank Selection */}
{/* Header */}
{transI18n("superimpositionRank")} S{lightcone.rank}
{/* Rank Buttons */}
{[1, 2, 3, 4, 5].map((r) => ( ))}
{/* Help Text */}
{transI18n("ranksNote")}
{/* Action Buttons */}
{/* Lightcone Image */}
Lightcone
{/* Lightcone Info & Controls */}
{/* Basic Info */} {lightconeDetail && (

{transI18n(lightconeDetail.BaseType.toLowerCase())}
{calcRarity(lightconeDetail.Rarity) + "⭐"}
{"id: " + lightcone.item_id}
)}
) : ( /* No Lightcone Equipped State */
handleShow("action_detail_modal")} className="w-24 h-24 mx-auto mb-6 bg-base-300 rounded-full flex items-center justify-center cursor-pointer" >

{transI18n("noLightconeEquipped")}

{transI18n("equipLightconeNote")}

)}
)}
handleCloseModal("action_detail_modal")} > ✕
); }