import React, { useState } from 'react'; import { View, Text, ScrollView, TouchableOpacity, StyleSheet, Alert, Share, } from 'react-native'; import { useLocalSearchParams, useRouter } from 'expo-router'; import { Ionicons } from '@expo/vector-icons'; import { SafeAreaView } from 'react-native-safe-area-context'; import { useFilamentStore } from '@store/filamentStore'; import { usePresetStore } from '@store/presetStore'; import { calcFilamentPercentage } from '@domain/Filament'; import { colors, typography, spacing, radius, getStockColor, getStockBgColor } from '@shared/theme'; import { formatWeight } from '@shared/utils/filament'; import { Card } from '@presentation/components/ui/Card'; import { Button } from '@presentation/components/ui/Button'; import { StockBar } from '@presentation/components/filament/StockBar'; /** * Tela de Detalhe do Filamento — 6L-0 */ export default function FilamentDetailScreen(): React.ReactElement { const { id } = useLocalSearchParams<{ id: string }>(); const router = useRouter(); const { filaments, removeFilament } = useFilamentStore(); const { presets } = usePresetStore(); const filament = filaments.find((f) => f.id === id); const preset = filament ? presets.find((p) => p.id === filament.spoolPresetId) : undefined; if (!filament) { return ( Filamento não encontrado router.back()}> Voltar ); } const pct = calcFilamentPercentage(filament); const stockColor = getStockColor(pct); const slug = `${filament.brand.toLowerCase()}-${(filament.model ?? '').toLowerCase()}-${filament.colorHex.replace('#', '').toLowerCase()}`.replace(/\s+/g, '-'); function handleDelete(): void { Alert.alert( 'Excluir filamento', `Deseja excluir "${filament!.brand}${filament!.model ? ` ${filament!.model}` : ''}"? Esta ação não pode ser desfeita.`, [ { text: 'Cancelar', style: 'cancel' }, { text: 'Excluir', style: 'destructive', onPress: () => { removeFilament(filament!.id); router.back(); }, }, ], ); } return ( {/* Header */} router.back()}> {filament.brand}{filament.model ? ` ${filament.model}` : ''} router.push(`/(app)/inventory/${id}/edit` as never)} style={styles.headerBtn} > {/* Identity Card */} {filament.brand}{filament.model ? ` ${filament.model}` : ''} {filament.brand} · {filament.colorHex.toLowerCase().startsWith('#') ? '' : '#'}{filament.colorHex} {filament.material} {filament.colorHex} {/* Filamento Disponível */} FILAMENTO DISPONÍVEL {pct}% {formatWeight(filament.netWeightG)} de {formatWeight(filament.totalWeightG)} Carretel: {preset?.name ?? '—'} · {preset?.spoolWeightG ?? 0}g Total pesado: {formatWeight(filament.totalWeightG)} {/* Parâmetros de Impressão */} PARÂMETROS DE IMPRESSÃO {filament.tempHotendC ?? '—'}°C Hotend {filament.tempBedC ?? '—'}°C Mesa {filament.flowFactorPct ?? '—'}% Fluxo {/* Identificação */} {/* QR Code placeholder */} Identificação {slug} router.push(`/(app)/filaments/${id}/label` as never)} > Exportar SVG router.push(`/(app)/filaments/${id}/qrcode` as never)} > Ver QR {/* Observações */} {filament.notes ? ( OBSERVAÇÕES {filament.notes} ) : null} {/* CTA fixo */}