/* 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")}
{/* 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")}
{/* Enhancement Selection */}
{avatarSelected?.Enhanced && (
{transI18n("enhancement")}
{transI18n("enhancedNote")}
)}
{/* Header */}
{transI18n("lightconeEquipment")}
{lightcone && lightconeDetail ? (
{/* Level & Rank Controls */}
{transI18n("lightconeSettings")}
{/* Level Input */}
{/* 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 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")}
)}
)}
);
}