{"version":3,"file":"src_App_tsx.chunk.bundle","sources":["/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/apps/data-oil-app/machinery/src/App.tsx","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/apps/data-oil-app/machinery/src/components/StatusCounters.tsx"],"sourcesContent":["import React, { useMemo, useState, useEffect, useCallback } from 'react';\nimport {\n  StyleSheet,\n  Text,\n  View,\n  TextInput,\n  TouchableOpacity,\n} from 'react-native';\nimport {\n  SafeAreaProvider,\n  useSafeAreaInsets,\n} from 'react-native-safe-area-context';\nimport { useFocusEffect, useNavigation } from '@react-navigation/native';\nimport dayjs from 'dayjs';\nimport utc from 'dayjs/plugin/utc';\nimport {\n  MobileTable,\n  SearchableSelect,\n  LoadingSpinner,\n} from '@data-oil-front/ui-mobile';\nimport {\n  fetchMachineryList,\n  fetchMachineryLocations,\n  fetchMachineryFuelLoads,\n  fetchFuelTankStock,\n  fetchMachineryFuelArrivals,\n  getLastFuelLoadsByMachinery,\n  getLastFuelArrivalsByTankId,\n  createLocationsMap,\n  type MachineryData,\n  type MachineryFuelLoad,\n  type MachineryFuelArrival,\n  type FuelTankStock,\n} from '@data-oil-front/core-machinery';\nimport { useTheme } from '@data-oil-front/core-host';\nimport { MACHINERY_SCREENS } from '@data-oil-front/core-utils';\nimport StatusCounters from './components/StatusCounters';\nimport StatusDot, { type MachineStatus } from './components/StatusDot';\n\ndayjs.extend(utc);\n\nfunction formatFuelArrivalDisplayDate(arrivalDate: string): string {\n  const d = dayjs(arrivalDate);\n  if (!d.isValid()) return '—';\n  const hourUTC = d.utc().hour();\n  const minuteUTC = d.utc().minute();\n  if (hourUTC === 0 && minuteUTC === 0) {\n    return d.format('DD/MM/YYYY');\n  }\n  return d.utc().format('DD/MM/YYYY HH:mm');\n}\n\ntype MachineStatusAPI = 'operational' | 'maintenance' | 'inactive';\n\nconst statusMap: Record<MachineStatusAPI, MachineStatus> = {\n  operational: 'operativa',\n  maintenance: 'mantenimiento',\n  inactive: 'inactiva',\n};\n\ntype LastFuelLoad = MachineryFuelLoad;\n\nfunction AppContent() {\n  const navigation = useNavigation();\n  const insets = useSafeAreaInsets();\n  const { primaryColor } = useTheme();\n\n  const [filters, setFilters] = useState<{ status: MachineStatus | 'Todos' }>({\n    status: 'Todos',\n  });\n  const [query, setQuery] = useState<string>('');\n  const [machineryList, setMachineryList] = useState<MachineryData[]>([]);\n  const [lastFuelLoads, setLastFuelLoads] = useState<Map<number, LastFuelLoad>>(\n    new Map(),\n  );\n  const [locations, setLocations] = useState<Map<number | string, string>>(\n    new Map(),\n  );\n  const [loading, setLoading] = useState<boolean>(true);\n  const [error, setError] = useState<string | null>(null);\n  const [tankStocks, setTankStocks] = useState<FuelTankStock[]>([]);\n  const [stockLoading, setStockLoading] = useState<boolean>(true);\n  const [stockError, setStockError] = useState<string | null>(null);\n  const [lastArrivalsByTank, setLastArrivalsByTank] = useState<\n    Map<number, MachineryFuelArrival>\n  >(new Map());\n\n  const loadMachineryData = useCallback(async () => {\n    setLoading(true);\n    setError(null);\n\n    try {\n      const machineryData = await fetchMachineryList();\n      setMachineryList(Array.isArray(machineryData) ? machineryData : []);\n\n      const locationData = await fetchMachineryLocations();\n      if (Array.isArray(locationData)) {\n        const locationsMap = createLocationsMap(locationData);\n        setLocations(locationsMap);\n      }\n\n      const fuelData = await fetchMachineryFuelLoads();\n      if (Array.isArray(fuelData)) {\n        const fuelLoadsMap = getLastFuelLoadsByMachinery(fuelData);\n        setLastFuelLoads(fuelLoadsMap);\n      }\n\n      try {\n        setStockLoading(true);\n        setStockError(null);\n        const [stockData, arrivalsData] = await Promise.all([\n          fetchFuelTankStock(),\n          fetchMachineryFuelArrivals().catch(() => [] as MachineryFuelArrival[]),\n        ]);\n        setTankStocks(Array.isArray(stockData) ? stockData : []);\n        setLastArrivalsByTank(\n          Array.isArray(arrivalsData)\n            ? getLastFuelArrivalsByTankId(arrivalsData)\n            : new Map(),\n        );\n      } catch (stockErr: any) {\n        setTankStocks([]);\n        setLastArrivalsByTank(new Map());\n        setStockError(stockErr?.message || 'No se pudo cargar el stock');\n      } finally {\n        setStockLoading(false);\n      }\n    } catch (err: any) {\n      console.error('Error al cargar maquinarias:', err);\n      setError(\n        err.message ||\n          'Error al cargar las maquinarias. Por favor, intente nuevamente.',\n      );\n      setMachineryList([]);\n    } finally {\n      setLoading(false);\n    }\n  }, []);\n\n  useEffect(() => {\n    loadMachineryData();\n  }, [loadMachineryData]);\n\n  useFocusEffect(\n    useCallback(() => {\n      loadMachineryData();\n    }, [loadMachineryData]),\n  );\n\n  const data = useMemo(() => {\n    return machineryList.map(machinery => {\n      const machineName =\n        machinery.name ||\n        machinery.machine_name ||\n        machinery.machinery_name ||\n        machinery.description ||\n        'Sin nombre';\n      const plate = machinery.plate || 'Sin placa';\n      const apiStatus = machinery.status || 'inactive';\n      const status = statusMap[apiStatus as MachineStatusAPI] || 'inactiva';\n\n      let locationName = '—';\n      if (machinery.location_id) {\n        const locId =\n          typeof machinery.location_id === 'string'\n            ? parseInt(machinery.location_id, 10)\n            : machinery.location_id;\n        locationName =\n          locations.get(locId) || locations.get(machinery.location_id) || '—';\n      }\n\n      const lastLoad = lastFuelLoads.get(machinery.id);\n      let ultCarga = '—';\n      let fechaUltCarga = '—';\n\n      if (lastLoad) {\n        ultCarga = `${lastLoad.load_quantity} L`;\n\n        const loadDate = dayjs(lastLoad.load_date);\n        if (loadDate.isValid()) {\n          const hourUTC = loadDate.utc().hour();\n          const minuteUTC = loadDate.utc().minute();\n\n          if (hourUTC === 0 && minuteUTC === 0) {\n            fechaUltCarga = loadDate.format('DD/MM/YYYY');\n          } else {\n            fechaUltCarga = loadDate.utc().format('DD/MM/YYYY HH:mm');\n          }\n        }\n      }\n\n      return {\n        id: machinery.id,\n        Máquina: machineName,\n        Status: (\n          <View style={styles.statusContainer}>\n            <StatusDot status={status} size={10} />\n            <Text style={styles.statusText}>{status}</Text>\n          </View>\n        ),\n        StatusValue: status,\n        Ubicación: locationName,\n        Placa: plate,\n        'Últ. carga': ultCarga,\n        'Fecha Ult. carga': fechaUltCarga,\n      } as Record<string, any>;\n    });\n  }, [machineryList, lastFuelLoads, locations]);\n\n  const filtered = useMemo(() => {\n    return data.filter(r => {\n      const byStatus =\n        filters.status === 'Todos' || r.StatusValue === filters.status;\n      const q = query.trim().toLowerCase();\n      const byQuery =\n        q === '' ||\n        String(r['Máquina']).toLowerCase().includes(q) ||\n        String(r.Placa).toLowerCase().includes(q);\n      return byStatus && byQuery;\n    });\n  }, [data, filters, query]);\n\n  const counters = useMemo(() => {\n    const totalOperativas = filtered.filter(\n      r => r.StatusValue === 'operativa',\n    ).length;\n    const totalMantenimiento = filtered.filter(\n      r => r.StatusValue === 'mantenimiento',\n    ).length;\n    const totalInactivas = filtered.filter(\n      r => r.StatusValue === 'inactiva',\n    ).length;\n    return { totalOperativas, totalMantenimiento, totalInactivas };\n  }, [filtered]);\n\n  const headerComponent = (\n    <View style={styles.headerContainer}>\n      <Text style={[styles.title, { color: primaryColor }]}>\n        Panel de maquinaria\n      </Text>\n\n      <StatusCounters\n        totalOperativas={counters.totalOperativas}\n        totalMantenimiento={counters.totalMantenimiento}\n        totalInactivas={counters.totalInactivas}\n      />\n\n      <View style={styles.stockCard}>\n        <Text style={styles.stockCardTitle}>Stock de combustible</Text>\n        <View style={styles.stockRow}>\n          {stockLoading ? (\n            <View style={styles.stockLoadingItem}>\n              <LoadingSpinner size=\"small\" color={primaryColor} />\n            </View>\n          ) : tankStocks.length > 0 ? (\n            tankStocks.map(tank => {\n              const lastArrival = lastArrivalsByTank.get(Number(tank.id));\n              const lastLiters =\n                lastArrival != null\n                  ? (typeof lastArrival.liters === 'number'\n                      ? lastArrival.liters\n                      : parseFloat(String(lastArrival.liters)))?.toLocaleString?.(\n                      'es-AR',\n                    ) || '—'\n                  : '—';\n              const lastDate =\n                lastArrival?.arrival_date != null\n                  ? formatFuelArrivalDisplayDate(String(lastArrival.arrival_date))\n                  : '—';\n              return (\n                <View key={tank.id} style={styles.stockItem}>\n                  <Text style={styles.stockFuelType} numberOfLines={1}>\n                    {tank.fuel_type?.charAt(0).toUpperCase() +\n                      tank.fuel_type?.slice(1)}\n                  </Text>\n                  <Text\n                    style={[styles.stockValue, { color: primaryColor }]}\n                    numberOfLines={1}\n                    adjustsFontSizeToFit\n                    minimumFontScale={0.7}\n                  >\n                    {(typeof tank.stock_actual === 'number'\n                      ? tank.stock_actual\n                      : parseFloat(String(tank.stock_actual)))?.toLocaleString?.(\n                      'es-AR',\n                    ) || '—'}{' '}\n                    L\n                  </Text>\n                  <View style={styles.stockDetailBlock}>\n                    <Text style={styles.stockDetailLabel}>Últ. fecha</Text>\n                    <Text\n                      style={styles.stockDetailValue}\n                      numberOfLines={2}\n                      adjustsFontSizeToFit\n                      minimumFontScale={0.85}\n                    >\n                      {lastDate}\n                    </Text>\n                  </View>\n                  <View style={styles.stockDetailBlock}>\n                    <Text style={styles.stockDetailLabel}>Últ. cant.</Text>\n                    <Text\n                      style={styles.stockDetailValue}\n                      numberOfLines={1}\n                      adjustsFontSizeToFit\n                      minimumFontScale={0.85}\n                    >\n                      {lastLiters === '—' ? '—' : `${lastLiters} L`}\n                    </Text>\n                  </View>\n                </View>\n              );\n            })\n          ) : stockError ? (\n            <View style={styles.stockErrorBox}>\n              <Text style={styles.stockErrorText}>\n                No se pudo cargar el stock de combustible\n              </Text>\n            </View>\n          ) : (\n            <Text style={styles.stockEmptyText}>Sin datos de stock</Text>\n          )}\n        </View>\n      </View>\n\n      <TouchableOpacity\n        style={[styles.fuelArrivalButton, { backgroundColor: primaryColor }]}\n        activeOpacity={0.85}\n        accessibilityLabel=\"Registrar llegada de combustible\"\n        onPress={() => {\n          // @ts-ignore\n          navigation.navigate(MACHINERY_SCREENS.FUEL_ARRIVAL);\n        }}\n      >\n        <Text\n          style={styles.fuelArrivalButtonText}\n          numberOfLines={1}\n          adjustsFontSizeToFit\n          minimumFontScale={0.75}\n        >\n          Registrar llegada de combustible\n        </Text>\n      </TouchableOpacity>\n\n      <View style={styles.filtersCard}>\n        <Text style={styles.filtersTitle}>Filtros</Text>\n        <View style={styles.filtersContent}>\n          <View style={styles.searchContainer}>\n            <TextInput\n              style={[styles.searchInput, { paddingRight: query ? 40 : 12 }]}\n              value={query}\n              onChangeText={setQuery}\n              placeholder=\"Buscar por nombre o placa\"\n              placeholderTextColor=\"#9CA3AF\"\n            />\n            {query ? (\n              <TouchableOpacity\n                onPress={() => setQuery('')}\n                style={styles.clearButton}\n                accessibilityLabel=\"Limpiar búsqueda\"\n              >\n                <Text style={styles.clearButtonText}>✕</Text>\n              </TouchableOpacity>\n            ) : null}\n          </View>\n          <View style={styles.selectContainer}>\n            <SearchableSelect\n              label=\"Status\"\n              selectedValue={filters.status}\n              onValueChange={value =>\n                setFilters(prev => ({ ...prev, status: String(value) as any }))\n              }\n              options={[\n                { value: 'Todos', label: 'Todos' },\n                { value: 'operativa', label: 'Operativas' },\n                { value: 'mantenimiento', label: 'Mantenimiento' },\n                { value: 'inactiva', label: 'Inactivas' },\n              ]}\n              placeholder=\"Status\"\n              minSearchLength={0}\n            />\n          </View>\n        </View>\n      </View>\n    </View>\n  );\n\n  const emptyComponent = (\n    <View style={styles.emptyBox}>\n      <Text style={styles.emptyIcon}>🔧</Text>\n      <Text style={styles.emptyText}>No se encontraron maquinarias</Text>\n    </View>\n  );\n\n  const loadingComponent = (\n    <View style={styles.loadingBox}>\n      <LoadingSpinner size=\"large\" color={primaryColor} />\n      <Text style={styles.loadingText}>Cargando maquinarias...</Text>\n    </View>\n  );\n\n  const errorComponent = (\n    <View style={styles.errorContainer}>\n      <Text style={styles.errorTitle}>Error al cargar las maquinarias</Text>\n      <Text style={styles.errorSubtitle}>\n        Verifica tu conexión o inténtalo nuevamente.\n      </Text>\n      <View style={styles.errorMessageBox}>\n        <Text style={styles.errorMessageText} numberOfLines={3}>\n          {error || 'Error desconocido'}\n        </Text>\n      </View>\n      <TouchableOpacity\n        onPress={loadMachineryData}\n        activeOpacity={0.8}\n        style={[styles.errorRetryButton, { backgroundColor: primaryColor }]}\n      >\n        <Text style={styles.errorRetryButtonText}>Reintentar</Text>\n      </TouchableOpacity>\n    </View>\n  );\n\n  return (\n    <SafeAreaProvider>\n      <View style={[styles.screen, { paddingTop: insets.top }]}>\n        <MobileTable\n          style={styles.table}\n          contentContainerStyle={{\n            ...styles.contentContainer,\n            paddingBottom: insets.bottom + 16,\n          }}\n          headerComponent={headerComponent}\n          ListEmptyComponent={\n            loading ? loadingComponent : error ? errorComponent : emptyComponent\n          }\n          data={filtered.map(r => ({\n            id: r.id,\n            Máquina: r['Máquina'],\n            Status: r.Status,\n            Ubicación: r.Ubicación,\n            Placa: r.Placa,\n            'Últ. carga': r['Últ. carga'],\n            'Fecha Ult. carga': r['Fecha Ult. carga'],\n          }))}\n          titleKey=\"Máquina\"\n          onRowClick={item => {\n            // @ts-ignore\n            navigation.navigate(MACHINERY_SCREENS.PREVIEW, { id: item.id });\n          }}\n          accentColor={primaryColor}\n        />\n      </View>\n    </SafeAreaProvider>\n  );\n}\n\nfunction App() {\n  return (\n    <SafeAreaProvider>\n      <AppContent />\n    </SafeAreaProvider>\n  );\n}\n\nconst styles = StyleSheet.create({\n  screen: {\n    flex: 1,\n    backgroundColor: '#F9FAFB',\n  },\n  table: {\n    flex: 1,\n  },\n  contentContainer: {\n    paddingHorizontal: 12,\n    paddingTop: 12,\n  },\n  headerContainer: {\n    paddingHorizontal: 4,\n    paddingVertical: 12,\n  },\n  title: {\n    fontSize: 24,\n    fontWeight: '700',\n    marginBottom: 16,\n  },\n  stockCard: {\n    marginTop: 16,\n    borderRadius: 12,\n    borderWidth: 1,\n    borderColor: '#E5E7EB',\n    backgroundColor: '#FFFFFF',\n    padding: 16,\n    shadowColor: '#000',\n    shadowOffset: { width: 0, height: 1 },\n    shadowOpacity: 0.05,\n    shadowRadius: 2,\n    elevation: 2,\n  },\n  stockCardTitle: {\n    fontSize: 16,\n    fontWeight: '700',\n    color: '#111827',\n    marginBottom: 12,\n  },\n  stockRow: {\n    flexDirection: 'row',\n    gap: 12,\n  },\n  stockItem: {\n    flex: 1,\n    minWidth: 0,\n    borderRadius: 10,\n    backgroundColor: '#F9FAFB',\n    padding: 12,\n    borderWidth: 1,\n    borderColor: '#F3F4F6',\n  },\n  stockFuelType: {\n    fontSize: 13,\n    fontWeight: '700',\n    color: '#374151',\n    textTransform: 'capitalize',\n    marginBottom: 4,\n  },\n  stockValue: {\n    fontSize: 22,\n    fontWeight: '800',\n    marginBottom: 6,\n  },\n  stockDetailBlock: {\n    marginTop: 6,\n  },\n  stockDetailLabel: {\n    fontSize: 10,\n    color: '#6B7280',\n    textTransform: 'uppercase',\n    letterSpacing: 0.3,\n    marginBottom: 2,\n  },\n  stockDetailValue: {\n    fontSize: 12,\n    fontWeight: '600',\n    color: '#374151',\n  },\n  stockEmptyText: {\n    fontSize: 13,\n    color: '#6B7280',\n  },\n  stockLoadingItem: {\n    flex: 1,\n    borderRadius: 10,\n    backgroundColor: '#F9FAFB',\n    padding: 12,\n    borderWidth: 1,\n    borderColor: '#F3F4F6',\n    minHeight: 110,\n    alignItems: 'center',\n    justifyContent: 'center',\n    gap: 8,\n  },\n  stockLoadingText: {\n    fontSize: 12,\n    color: '#6B7280',\n  },\n  stockErrorBox: {\n    borderRadius: 8,\n    borderWidth: 1,\n    borderColor: '#FECACA',\n    backgroundColor: '#FEF2F2',\n    padding: 10,\n    width: '100%',\n  },\n  stockErrorText: {\n    fontSize: 12,\n    color: '#991B1B',\n  },\n  fuelArrivalButton: {\n    marginTop: 16,\n    borderRadius: 10,\n    paddingHorizontal: 14,\n    paddingVertical: 12,\n    alignItems: 'center',\n    alignSelf: 'stretch',\n  },\n  fuelArrivalButtonText: {\n    color: '#FFFFFF',\n    fontSize: 15,\n    fontWeight: '700',\n    textAlign: 'center',\n    width: '100%',\n  },\n  filtersCard: {\n    marginTop: 16,\n    borderRadius: 12,\n    borderWidth: 1,\n    borderColor: '#E5E7EB',\n    backgroundColor: '#FFFFFF',\n    padding: 16,\n    shadowColor: '#000',\n    shadowOffset: { width: 0, height: 1 },\n    shadowOpacity: 0.05,\n    shadowRadius: 2,\n    elevation: 2,\n  },\n  filtersTitle: {\n    fontSize: 18,\n    fontWeight: '700',\n    color: '#111827',\n    marginBottom: 16,\n  },\n  filtersContent: {\n    gap: 16,\n  },\n  searchContainer: {\n    position: 'relative',\n  },\n  searchInput: {\n    width: '100%',\n    height: 44,\n    borderWidth: 1,\n    borderColor: '#D1D5DB',\n    borderRadius: 8,\n    paddingHorizontal: 12,\n    fontSize: 14,\n    color: '#111827',\n    backgroundColor: '#FFFFFF',\n  },\n  clearButton: {\n    position: 'absolute',\n    right: 8,\n    top: '50%',\n    transform: [{ translateY: -12 }],\n    width: 24,\n    height: 24,\n    alignItems: 'center',\n    justifyContent: 'center',\n  },\n  clearButtonText: {\n    fontSize: 16,\n    color: '#6B7280',\n  },\n  selectContainer: {\n    width: '100%',\n  },\n  statusContainer: {\n    flexDirection: 'row',\n    alignItems: 'center',\n    gap: 8,\n  },\n  statusText: {\n    fontSize: 14,\n    color: '#111827',\n    fontWeight: '500',\n    textTransform: 'capitalize',\n  },\n  loadingBox: {\n    paddingVertical: 40,\n    alignItems: 'center',\n    gap: 12,\n  },\n  loadingText: {\n    color: '#6B7280',\n    fontSize: 16,\n  },\n  errorContainer: {\n    width: '100%',\n    borderRadius: 8,\n    borderWidth: 1,\n    borderColor: '#fecaca',\n    backgroundColor: '#fff1f2',\n    padding: 16,\n    marginHorizontal: 12,\n  },\n  errorTitle: {\n    fontSize: 16,\n    fontWeight: '600',\n    color: '#7f1d1d',\n    marginBottom: 4,\n  },\n  errorSubtitle: {\n    fontSize: 14,\n    color: '#7f1d1d',\n    marginBottom: 8,\n  },\n  errorMessageBox: {\n    backgroundColor: '#ffe4e6',\n    padding: 12,\n    borderRadius: 6,\n    marginBottom: 12,\n  },\n  errorMessageText: {\n    fontSize: 12,\n    color: '#7f1d1d',\n  },\n  errorRetryButton: {\n    alignSelf: 'flex-start',\n    paddingHorizontal: 16,\n    paddingVertical: 10,\n    borderRadius: 6,\n  },\n  errorRetryButtonText: {\n    color: '#ffffff',\n    fontSize: 14,\n    fontWeight: '600',\n  },\n  emptyBox: {\n    paddingVertical: 40,\n    alignItems: 'center',\n  },\n  emptyIcon: {\n    fontSize: 48,\n    marginBottom: 12,\n  },\n  emptyText: {\n    color: '#6B7280',\n    fontSize: 16,\n  },\n});\n\nexport default App;\n","import React from 'react';\nimport { View, Text, StyleSheet } from 'react-native';\nimport { statusColorMap } from './StatusDot';\n\ninterface StatusCountersProps {\n  totalOperativas: number;\n  totalMantenimiento: number;\n  totalInactivas: number;\n}\n\nexport default function StatusCounters({\n  totalOperativas,\n  totalMantenimiento,\n  totalInactivas,\n}: StatusCountersProps) {\n  return (\n    <View style={styles.container}>\n      <View style={[styles.card, styles.cardOperativas]}>\n        <View\n          style={[\n            styles.iconCircle,\n            { backgroundColor: statusColorMap.operativa },\n          ]}\n        >\n          <Text style={styles.iconText}>{totalOperativas}</Text>\n        </View>\n        <Text\n          style={styles.label}\n          numberOfLines={1}\n          adjustsFontSizeToFit\n          minimumFontScale={0.75}\n        >\n          Operativas\n        </Text>\n      </View>\n      <View style={[styles.card, styles.cardMantenimiento]}>\n        <View\n          style={[\n            styles.iconCircle,\n            { backgroundColor: statusColorMap.mantenimiento },\n          ]}\n        >\n          <Text style={styles.iconText}>{totalMantenimiento}</Text>\n        </View>\n        <Text\n          style={styles.label}\n          numberOfLines={1}\n          adjustsFontSizeToFit\n          minimumFontScale={0.75}\n        >\n          Mantenimiento\n        </Text>\n      </View>\n      <View style={[styles.card, styles.cardInactivas]}>\n        <View\n          style={[\n            styles.iconCircle,\n            { backgroundColor: statusColorMap.inactiva },\n          ]}\n        >\n          <Text style={styles.iconText}>{totalInactivas}</Text>\n        </View>\n        <Text\n          style={styles.label}\n          numberOfLines={1}\n          adjustsFontSizeToFit\n          minimumFontScale={0.75}\n        >\n          Inactivas\n        </Text>\n      </View>\n    </View>\n  );\n}\n\nconst styles = StyleSheet.create({\n  container: {\n    flexDirection: 'row',\n    gap: 10,\n    marginBottom: 24,\n  },\n  card: {\n    flex: 1,\n    borderRadius: 12,\n    padding: 8,\n    minHeight: 80,\n    alignItems: 'center',\n    justifyContent: 'center',\n    gap: 8,\n    borderWidth: 1,\n    shadowColor: '#000',\n    shadowOffset: { width: 0, height: 1 },\n    shadowOpacity: 0.05,\n    shadowRadius: 2,\n    elevation: 2,\n  },\n  cardOperativas: {\n    backgroundColor: '#ECFDF5',\n    borderColor: '#D1FAE5',\n  },\n  cardMantenimiento: {\n    backgroundColor: '#FFFBEB',\n    borderColor: '#FDE68A',\n  },\n  cardInactivas: {\n    backgroundColor: '#FEF2F2',\n    borderColor: '#FECACA',\n  },\n  iconCircle: {\n    width: 40,\n    height: 40,\n    borderRadius: 20,\n    alignItems: 'center',\n    justifyContent: 'center',\n  },\n  iconText: {\n    fontSize: 20,\n    fontWeight: '800',\n    color: '#FFFFFF',\n  },\n  label: {\n    fontSize: 12,\n    fontWeight: '600',\n    color: '#374151',\n    width: '100%',\n    textAlign: 'center',\n  },\n});\n"],"names":["dayjs","extend","utc","statusMap","operational","maintenance","inactive","AppContent","navigation","useNavigation","insets","useSafeAreaInsets","useTheme","primaryColor","useState","status","filters","setFilters","query","setQuery","machineryList","setMachineryList","Map","LastFuelLoad","lastFuelLoads","setLastFuelLoads","locations","setLocations","loading","setLoading","error","setError","tankStocks","setTankStocks","stockLoading","setStockLoading","stockError","setStockError","MachineryFuelArrival","lastArrivalsByTank","setLastArrivalsByTank","loadMachineryData","useCallback","machineryData","fetchMachineryList","Array","isArray","locationData","fetchMachineryLocations","locationsMap","createLocationsMap","fuelData","fetchMachineryFuelLoads","fuelLoadsMap","getLastFuelLoadsByMachinery","Promise","all","fetchFuelTankStock","fetchMachineryFuelArrivals","catch","stockData","arrivalsData","getLastFuelArrivalsByTankId","stockErr","message","err","console","useEffect","useFocusEffect","data","useMemo","map","machinery","machineName","name","machine_name","machinery_name","description","plate","apiStatus","locationName","location_id","locId","parseInt","get","lastLoad","id","ultCarga","fechaUltCarga","load_quantity","loadDate","load_date","isValid","hourUTC","hour","minuteUTC","minute","format","Máquina","Status","View","style","styles","statusContainer","size","Text","statusText","StatusValue","Ubicación","Placa","filtered","filter","r","byStatus","q","trim","toLowerCase","byQuery","String","includes","counters","length","headerComponent","headerContainer","title","color","totalOperativas","totalMantenimiento","totalInactivas","stockCard","stockCardTitle","stockRow","stockLoadingItem","LoadingSpinner","tank","lastArrival","Number","lastLiters","liters","parseFloat","toLocaleString","lastDate","arrival_date","arrivalDate","d","formatFuelArrivalDisplayDate","stockItem","stockFuelType","numberOfLines","fuel_type","charAt","toUpperCase","slice","stockValue","adjustsFontSizeToFit","minimumFontScale","stock_actual","stockDetailBlock","stockDetailLabel","stockDetailValue","stockErrorBox","stockErrorText","stockEmptyText","TouchableOpacity","fuelArrivalButton","backgroundColor","activeOpacity","accessibilityLabel","onPress","navigate","MACHINERY_SCREENS","FUEL_ARRIVAL","fuelArrivalButtonText","filtersCard","filtersTitle","filtersContent","searchContainer","TextInput","searchInput","paddingRight","value","onChangeText","placeholder","placeholderTextColor","clearButton","clearButtonText","selectContainer","SearchableSelect","label","selectedValue","onValueChange","prev","options","minSearchLength","emptyComponent","emptyBox","emptyIcon","emptyText","loadingComponent","loadingBox","loadingText","errorComponent","errorContainer","errorTitle","errorSubtitle","errorMessageBox","errorMessageText","errorRetryButton","errorRetryButtonText","SafeAreaProvider","screen","paddingTop","top","MobileTable","table","contentContainerStyle","contentContainer","paddingBottom","bottom","ListEmptyComponent","titleKey","onRowClick","item","PREVIEW","accentColor","StyleSheet","create","flex","paddingHorizontal","paddingVertical","fontSize","fontWeight","marginBottom","marginTop","borderRadius","borderWidth","borderColor","padding","shadowColor","shadowOffset","width","height","shadowOpacity","shadowRadius","elevation","flexDirection","gap","minWidth","textTransform","letterSpacing","minHeight","alignItems","justifyContent","stockLoadingText","alignSelf","textAlign","position","right","transform","translateY","marginHorizontal","StatusCounters","container","card","cardOperativas","iconCircle","statusColorMap","operativa","iconText","cardMantenimiento","mantenimiento","cardInactivas","inactiva"],"mappings":"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"}