import { MainLayout } from '@/components/layout/MainLayout.tsx'; import PageHeader from '@/components/layout/PageHeader.tsx'; import MatchesList from '@/components/matches/MatchesList.tsx'; import ResourceFlowCard from '@/components/resource-flow/ResourceFlowCard.tsx'; import { formatQuantity } from '@/components/resource-flow/utils'; import Badge from '@/components/ui/Badge.tsx'; import Button from '@/components/ui/Button.tsx'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/Card.tsx'; import { Container, Flex, Grid, Stack } from '@/components/ui/layout'; import { useResourceFlow } from '@/hooks/api/useResourcesAPI.ts'; import { useTranslation } from '@/hooks/useI18n.tsx'; import { useNavigation } from '@/hooks/useNavigation.tsx'; import type { BackendResourceFlow } from '@/schemas/backend/resource-flow'; import { DollarSign, FlaskConical, Thermometer, TrendingUp } from 'lucide-react'; import React from 'react'; import { useNavigate, useParams } from 'react-router-dom'; const ResourceFlowDetailPage = () => { const { id } = useParams<{ id: string }>(); const navigate = useNavigate(); const { t } = useTranslation(); const { handleBackNavigation, handleFooterNavigate } = useNavigation(); const { data: resourceFlow, isLoading, error } = useResourceFlow(id); if (isLoading) { return (
); } if (error || !resourceFlow) { return (

{error?.message || t('resourceFlowDetail.notFound')}

); } const handleViewMatches = (resourceId: string) => { navigate(`/matching?resourceId=${resourceId}`); }; return ( {/* Resource Flow Overview */} {/* Key Metrics */} {/* Quality Parameters */} {t('resourceFlowDetail.qualityParameters')} {/* Economic Data */} {(resourceFlow.EconomicData?.cost_in || resourceFlow.EconomicData?.cost_out || resourceFlow.EconomicData?.waste_disposal_cost) && ( {t('resourceFlowDetail.economicData')} )} {/* Related Matches */} ); }; // Component for displaying key metrics const ResourceFlowMetrics: React.FC<{ resourceFlow: BackendResourceFlow }> = ({ resourceFlow }) => { const { t } = useTranslation(); const metrics = [ { label: t('resourceFlowDetail.direction'), value: ( {t(`resourceFlowDirection.${resourceFlow.Direction}`)} ), icon: , }, { label: t('resourceFlowDetail.type'), value: {t(`resourceTypes.${resourceFlow.Type}`)}, icon: , }, { label: t('resourceFlowDetail.precision'), value: ( {t(`precisionLevels.${resourceFlow.PrecisionLevel || 'estimated'}`)} ), icon: , }, { label: t('resourceFlowDetail.source'), value: ( {t(`sourceTypes.${resourceFlow.SourceType || 'declared'}`)} ), icon: , }, ]; return ( <> {metrics.map((metric, index) => ( {metric.icon} {metric.label}
{metric.value}
))} ); }; // Component for displaying quality parameters const QualityParametersTable: React.FC<{ resourceFlow: BackendResourceFlow }> = ({ resourceFlow, }) => { const { t } = useTranslation(); const qualityData = resourceFlow.Quality || {}; const quantityData = resourceFlow.Quantity || {}; const parameters = [ { label: t('resourceFlowDetail.quantity.amount'), value: formatQuantity(quantityData) || t('common.na'), }, { label: t('resourceFlowDetail.quantity.temporalUnit'), value: quantityData.temporal_unit ? t(`temporalUnits.${quantityData.temporal_unit}`) : t('common.na'), }, { label: t('resourceFlowDetail.quality.temperature'), value: qualityData.temperature_celsius !== undefined ? `${qualityData.temperature_celsius}°C` : t('common.na'), }, { label: t('resourceFlowDetail.quality.pressure'), value: qualityData.pressure_bar !== undefined ? `${qualityData.pressure_bar} bar` : t('common.na'), }, { label: t('resourceFlowDetail.quality.purity'), value: qualityData.purity_pct ? `${qualityData.purity_pct}%` : t('common.na'), }, { label: t('resourceFlowDetail.quality.physicalState'), value: qualityData.physical_state ? t(`physicalStates.${qualityData.physical_state}`) : t('common.na'), }, ]; return (
{parameters.map((param, index) => (
{param.label} {param.value}
))}
); }; // Component for displaying economic data const EconomicDataDisplay: React.FC<{ resourceFlow: BackendResourceFlow }> = ({ resourceFlow }) => { const { t } = useTranslation(); const economicData = resourceFlow.EconomicData || {}; const costs = [ { label: t('resourceFlowDetail.economic.costIn'), value: economicData.cost_in ? `€${economicData.cost_in}/${resourceFlow.Quantity?.unit || 'unit'}` : null, }, { label: t('resourceFlowDetail.economic.costOut'), value: economicData.cost_out ? `€${economicData.cost_out}/${resourceFlow.Quantity?.unit || 'unit'}` : null, }, { label: t('resourceFlowDetail.economic.wasteCost'), value: economicData.waste_disposal_cost ? `€${economicData.waste_disposal_cost}/${resourceFlow.Quantity?.unit || 'unit'}` : null, }, { label: t('resourceFlowDetail.economic.transportCost'), value: economicData.transportation_cost ? `€${economicData.transportation_cost}/km` : null, }, ].filter((cost) => cost.value); if (costs.length === 0) { return (

{t('resourceFlowDetail.economic.noData')}

); } return (
{costs.map((cost, index) => (
{cost.label} {cost.value}
))}
); }; export default ResourceFlowDetailPage;