"use client"; import useAvatarDataStore from "@/stores/avatarDataStore"; import useBattleDataStore from "@/stores/battleDataStore"; import CharacterCard from "../card/characterCard"; import { useTranslations } from "next-intl"; import { useState, useEffect } from "react"; import { AvatarHakushiType } from "@/types"; import useLocaleStore from "@/stores/localeStore"; import { getNameChar } from '@/helper/getNameChar'; import SkillBarChart from "../chart/skillBarChart"; import SkillPieChart from "../chart/skillPieChart"; import { motion } from "framer-motion"; import { DamageLineForOne } from "../chart/damageLineForOne"; import { DamagePerCycleForOne } from "../chart/damagePerCycleForOne"; import { useCalcTotalDmgAvatar, useCalcTotalTurnAvatar } from "@/hooks/useCalcAvatarData"; import Image from "next/image"; import NameAvatar from "../nameAvatar"; // import ShowCaseInfo from "../card/showCaseCard"; export default function LineupBar() { const [selectedCharacter, setSelectedCharacter] = useState(undefined); const [isModalOpen, setIsModalOpen] = useState(false); const transI18n = useTranslations("DataAnalysisPage"); const { lineup, turnHistory, dataAvatar } = useBattleDataStore(); const { listAvatar } = useAvatarDataStore(); const { locale } = useLocaleStore(); const totalDamage = useCalcTotalDmgAvatar(selectedCharacter ? Number(selectedCharacter.id) : 0); const totalTurn = useCalcTotalTurnAvatar(selectedCharacter ? Number(selectedCharacter.id) : 0) const lineupAvatars = listAvatar.filter(item => lineup.some(av => av.avatarId.toString() === item.id) ); const handleShow = (modalId: string, item: AvatarHakushiType) => { const modal = document.getElementById(modalId) as HTMLDialogElement | null; if (modal) { setSelectedCharacter(item); setIsModalOpen(true); modal.showModal(); } }; // Close modal handler const handleCloseModal = (modalId: string) => { setIsModalOpen(false); setSelectedCharacter(undefined); const modal = document.getElementById(modalId) as HTMLDialogElement | null; if (modal) { modal.close() } }; // Handle ESC key to close modal useEffect(() => { const handleEscKey = (event: KeyboardEvent) => { if (event.key === 'Escape' && isModalOpen) { handleCloseModal("character_detail_modal"); } }; window.addEventListener('keydown', handleEscKey); return () => window.removeEventListener('keydown', handleEscKey); }, [isModalOpen]); return (
{transI18n("lineupInfo")}
{transI18n("lastTurn")}:
it.id === turnHistory.findLast(i => i?.avatarId)?.avatarId?.toString()))} />
{lineupAvatars.length === 0 ? (

{transI18n("noCharactersInLineup")}

) : (
{lineupAvatars.map((item, index) => { const lastTurnAvatarId = turnHistory.findLast(i => i?.avatarId)?.avatarId || -1; const isLastTurn = item.id === lastTurnAvatarId.toString(); return ( handleShow("character_detail_modal", item)} className={`cursor-pointer flex-shrink-0 justify-items-center ${isLastTurn ? "shadow-[inset_0_0_10px_2px_rgba(59,130,246,0.7),_0_0_20px_5px_rgba(59,130,246,0.3)]" : "" }`} > ); })}
)} {/* Character Detail Modal */}
handleCloseModal("character_detail_modal")} > ✕
{selectedCharacter && (

{transI18n("characterInformation")}

{transI18n("id")}: {selectedCharacter.id}

{transI18n("path")}: {transI18n(selectedCharacter.baseType.toLowerCase())} {selectedCharacter.baseType && ( {selectedCharacter.baseType.toLowerCase()} )}

{transI18n("rarity")}: {selectedCharacter.rank === "CombatPowerAvatarRarityType5" ? "5*" : "4*"}

{transI18n("element")}: {selectedCharacter.damageType.toLowerCase()}

{(() => { const avatar = dataAvatar.find(it => it.avatar_id.toString() === selectedCharacter.id); if (!avatar) return null; const relicIds = avatar.relics.map(item => { const relicIdStr = item.relic_id.toString().slice(1); const slot = relicIdStr.slice(-1); return `${item.relic_set_id}_${slot}`; }); return ( <>

{transI18n("level")}: {avatar.level}

{transI18n("eidolons")}: {avatar?.data?.rank}

{transI18n("lightcones")}: {avatar?.Lightcone?.item_id?.toString()

{transI18n("relics")}:

{relicIds.map(it => ( {avatar?.Lightcone?.item_id?.toString() ))}

); })()}
{getNameChar(locale,
{/*

{transI18n("characterInformation")}

*/}

{transI18n("totalTurn")}: {totalTurn.toFixed(2)}

{transI18n("totalDamage")}: {totalDamage.toFixed(2)}

{transI18n("skillDamageBreakdown")}

{transI18n("damageOverTime")}

{transI18n("skillUsageDistribution")}

{transI18n("damagePerCycle")}

)}
); }