'use client' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" import { useEffect, useState } from "react" import { useAnalysisYear } from "@/contexts/AnalysisYearContext" import { useFilterStore } from "@/store/filter-store" import { Badge } from "@/components/ui/badge" import { Button } from "@/components/ui/button" import { Filter, ChevronDown, ChevronUp } from "lucide-react" interface GeneData { geneName: string geneType: '육량' | '육질' // 유전자 분류 farmRate: number // 우리 농장 우량형(AA) 보유율 regionAvgRate: number // 지역 평균 } interface GenePossessionStatusProps { farmNo: number | null } export function GenePossessionStatus({ farmNo }: GenePossessionStatusProps) { const { selectedYear } = useAnalysisYear() const { filters } = useFilterStore() const [allGenes, setAllGenes] = useState([]) const [loading, setLoading] = useState(true) const [isExpanded, setIsExpanded] = useState(false) // 선택된 유전자 확인 const selectedGenes = filters.selectedGenes || [] const hasFilter = selectedGenes.length > 0 useEffect(() => { const fetchData = async () => { setLoading(true) // TODO: 백엔드 API 연동 시 실제 데이터 fetch // 현재는 목업 데이터 사용 (전체 유전자 리스트) const mockAllGenes: GeneData[] = [ // 육량 관련 { geneName: 'PLAG1', geneType: '육량', farmRate: 85, regionAvgRate: 72 }, { geneName: 'NCAPG', geneType: '육량', farmRate: 82, regionAvgRate: 75 }, { geneName: 'LCORL', geneType: '육량', farmRate: 78, regionAvgRate: 68 }, { geneName: 'LAP3', geneType: '육량', farmRate: 65, regionAvgRate: 58 }, // 육질 관련 { geneName: 'FABP4', geneType: '육질', farmRate: 88, regionAvgRate: 70 }, { geneName: 'SCD', geneType: '육질', farmRate: 80, regionAvgRate: 72 }, { geneName: 'DGAT1', geneType: '육질', farmRate: 75, regionAvgRate: 65 }, { geneName: 'FASN', geneType: '육질', farmRate: 70, regionAvgRate: 62 }, { geneName: 'CAPN1', geneType: '육질', farmRate: 82, regionAvgRate: 68 }, { geneName: 'CAST', geneType: '육질', farmRate: 77, regionAvgRate: 64 }, ] // 선택된 유전자 중 목업 데이터에 없는 유전자가 있다면 추가 if (selectedGenes.length > 0) { selectedGenes.forEach(geneName => { if (!mockAllGenes.find(g => g.geneName === geneName)) { // 선택된 유전자가 목업 데이터에 없으면 기본값으로 추가 mockAllGenes.push({ geneName: geneName, geneType: geneName.includes('PLAG') || geneName.includes('NCAPG') || geneName.includes('LCORL') || geneName.includes('LAP') ? '육량' : '육질', farmRate: Math.floor(Math.random() * 30) + 60, // 60-90 사이 랜덤값 regionAvgRate: Math.floor(Math.random() * 20) + 55, // 55-75 사이 랜덤값 }) } }) } setAllGenes(mockAllGenes) setLoading(false) } fetchData() }, [selectedYear, farmNo, selectedGenes]) if (loading) { return (

데이터 로딩 중...

) } if (!farmNo) { return (

농장 정보가 없습니다

로그인 후 다시 시도해주세요

) } // 필터에 따라 표시할 유전자 선택 const allDisplayGenes = hasFilter ? allGenes.filter(g => selectedGenes.includes(g.geneName)) : allGenes.slice(0, 6) // TOP 6 (보유율 높은 순으로 이미 정렬됨) // 접기/펼치기 적용 (4개 기준) // 단, 선택된 유전자가 있을 때는 모두 표시 const DISPLAY_LIMIT = 4 const displayGenes = hasFilter || isExpanded ? allDisplayGenes : allDisplayGenes.slice(0, DISPLAY_LIMIT) const hasMore = !hasFilter && allDisplayGenes.length > DISPLAY_LIMIT return (
{/* 필터 배지 표시 */} {hasFilter && (
타겟 유전자:
{selectedGenes.map(gene => ( {gene} ))}
)} {/* 유전자별 바 차트 */}
{displayGenes.map((gene, index) => (
{/* 유전자명 + 타입 배지 */}
{gene.geneName} {gene.geneType}
{gene.farmRate}%
{/* 프로그레스 바 */}
{/* 우리 농장 */}
{/* 지역 평균 표시 (점선) */}
{/* 지역 평균 레이블 */}
지역 평균: {gene.regionAvgRate}%
))}
{/* 더보기/접기 버튼 */} {hasMore && (
)}
) }