import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Label } from "@/components/ui/label"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { Filter, Loader2 } from 'lucide-react'; import { SpeciesDetails, CitesTradeRecord } from '@/lib/api'; import { useQuery } from '@tanstack/react-query'; import { getCitesTradeRecords } from '@/lib/api'; import { useTradeDataVisualization } from '@/hooks/useTradeDataVisualization'; import { useTradeRecordFilters, CountryOption } from '@/hooks/useTradeRecordFilters'; import { getCountryName } from '@/lib/countries'; import { TradeCharts } from '../visualizations/TradeCharts'; import { getTimelineEvents, TimelineEvent } from '@/lib/api'; import { getCatchRecords, CatchRecord } from '@/lib/api'; import { CatchChart } from '../visualizations/CatchChart'; interface TradeDataTabProps { species: SpeciesDetails; } export function TradeDataTab({ species }: TradeDataTabProps) { const isNarwhal = species.scientific_name === 'Monodon monoceros'; const { data: tradeRecords, isLoading: tradeLoading, error: tradeError } = useQuery({ queryKey: ["tradeRecords", species.id], queryFn: () => getCitesTradeRecords(species.id), }); const { data: timelineEvents } = useQuery({ queryKey: ["timelineEvents", species.id], queryFn: () => getTimelineEvents(species.id), }); const { data: catchRecords, isLoading: catchLoading, error: catchError } = useQuery({ queryKey: ["catchRecords", species.id], queryFn: () => getCatchRecords(species.id), enabled: isNarwhal, }); const { startYearFilter, setStartYearFilter, endYearFilter, setEndYearFilter, termFilter, setTermFilter, importerFilter, setImporterFilter, exporterFilter, setExporterFilter, filteredRecords, resetFilters, yearRange, uniqueImporters, uniqueExporters } = useTradeRecordFilters(tradeRecords); const { visualizationData, years, terms, PURPOSE_DESCRIPTIONS, SOURCE_DESCRIPTIONS } = useTradeDataVisualization(tradeRecords, filteredRecords); return ( CITES Trade Records International trade data reported to CITES {tradeLoading ? (
) : tradeError ? (

Error loading trade records. Please try again later.

{(tradeError as Error)?.message || 'Unknown error'}

) : tradeRecords && tradeRecords.length > 0 ? (

Filter Trade Records

{(startYearFilter !== "all" || endYearFilter !== "all" || termFilter !== "all" || importerFilter !== "all" || exporterFilter !== "all") && (
)}

Trade Summary

Records

{filteredRecords.length}

{filteredRecords.length !== tradeRecords.length && (

of {tradeRecords.length} total

)}

Year Range

{filteredRecords.length > 0 ? `${startYearFilter === "all" ? yearRange.min : startYearFilter} - ${endYearFilter === "all" ? yearRange.max : endYearFilter}` : 'N/A' }

Total Quantity

{filteredRecords .reduce((sum: number, record: CitesTradeRecord) => sum + (Number(record.quantity) || 0), 0) .toLocaleString()}

{visualizationData && ( )} {isNarwhal && catchRecords && catchRecords.length > 0 && (
)} {isNarwhal && catchLoading && (

Loading catch data...

)} {isNarwhal && catchError && (

Error loading catch records.

{catchError.message || 'Unknown error'}

)} {isNarwhal && !catchLoading && !catchError && catchRecords?.length === 0 && (

No specific catch data found for Narwhal.

)}

About CITES Trade Data

The CITES Trade Database, managed by UNEP-WCMC on behalf of the CITES Secretariat, contains records of trade in wildlife listed in the CITES Appendices. Records include information on species, appendix, purpose, source, quantities, units, and countries involved in the trade.

) : (

No trade records available for this species.

About CITES Trade Records

CITES trade records document international trade in wildlife listed in the CITES Appendices. Not all species have recorded trade data, particularly if they haven't been traded internationally or if trade reports haven't been submitted to the CITES Trade Database.

If you believe this species should have trade records, please check the following:

  • Verify the species is listed in a CITES Appendix
  • Check if the scientific name has been recorded differently
  • Trade may be recorded at a higher taxonomic level (family or genus)
)}
); }