{"version":3,"file":"src_screens_MachineNewFuelScreen_tsx.chunk.bundle","sources":["/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/apps/data-oil-app/machinery/src/screens/MachineNewFuel.tsx","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/apps/data-oil-app/machinery/src/screens/MachineNewFuelScreen.tsx","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/apps/data-oil-app/machinery/src/utils/safeParseParamId.ts"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport {\n  StyleSheet,\n  View,\n  Text,\n  ScrollView,\n  TextInput,\n  TouchableOpacity,\n  Image,\n} from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { useNavigation, useRoute } from '@react-navigation/native';\nimport dayjs from 'dayjs';\nimport utc from 'dayjs/plugin/utc';\nimport {\n  fetchMachineryById,\n  fetchMachineryFuelLoadById,\n  insertMachineryFuelLoad,\n  updateMachineryFuelLoad,\n  getTankByFuelType,\n  validateTankStock,\n  type MachineryFuelLoad,\n  type MachineryData,\n} from '@data-oil-front/core-machinery';\nimport {\n  configService,\n  useAuth,\n  useConfig,\n} from '@data-oil-front/core-host';\nimport { uploadFileToServer, MACHINERY_SCREENS } from '@data-oil-front/core-utils';\nimport {\n  ConfirmationModal,\n  DatePicker,\n  LoadingSpinner,\n  TimePicker,\n} from '@data-oil-front/ui-mobile';\nimport { safeParseParamId } from '../utils/safeParseParamId';\nimport { pickDocument } from '../utils/safeDocumentPicker';\n\ndayjs.extend(utc);\n\nfunction parseHHmm(value: string | null): { hh: number; mm: number } | null {\n  if (!value) return null;\n  const m = /^(\\d{2}):(\\d{2})$/.exec(value);\n  if (!m) return null;\n  const hh = Number(m[1]);\n  const mm = Number(m[2]);\n  if (!Number.isFinite(hh) || !Number.isFinite(mm)) return null;\n  if (hh < 0 || hh > 23 || mm < 0 || mm > 59) return null;\n  return { hh, mm };\n}\n\nfunction formatFuelTypeLabel(fuelType?: string | null): string {\n  if (!fuelType || !fuelType.trim()) return '—';\n  const normalized = fuelType.trim();\n  return normalized.charAt(0).toUpperCase() + normalized.slice(1).toLowerCase();\n}\n\nexport default function MachineNewFuel() {\n  const route = useRoute<any>();\n  const navigation = useNavigation();\n  const insets = useSafeAreaInsets();\n  const machineryId = safeParseParamId(route?.params?.id);\n  const fuelLoadId = safeParseParamId(route?.params?.fuelLoadId);\n  const isEditMode = fuelLoadId !== undefined;\n\n  const { config: clientConfig } = useConfig();\n  const { user } = useAuth();\n  const defaultConfig = useMemo(() => configService.getDefaultConfig(), []);\n  const accentColor =\n    clientConfig.primaryColor ?? defaultConfig.primaryColor ?? '#1B418C';\n\n  const [machineryData, setMachineryData] = useState<MachineryData | null>(\n    null,\n  );\n  const [loadingMachinery, setLoadingMachinery] = useState(true);\n  const [loadingFuelLoad, setLoadingFuelLoad] = useState(false);\n\n  const [liters, setLiters] = useState<string>('');\n  const [loadDate, setLoadDate] = useState<Date | null>(new Date());\n  const [loadTime, setLoadTime] = useState<string | null>(\n    dayjs().format('HH:mm'),\n  );\n\n  const [fuelImage, setFuelImage] = useState<string>('');\n  const [localImageUri, setLocalImageUri] = useState<string>('');\n  const [isUploadingImage, setIsUploadingImage] = useState(false);\n\n  const [touched, setTouched] = useState(false);\n  const [error, setError] = useState<string | null>(null);\n  const [isSaving, setIsSaving] = useState(false);\n  const [confirmOpen, setConfirmOpen] = useState(false);\n\n  const apiFileServer = useMemo(() => {\n    const cfg = configService.getCurrentConfig() as any;\n    return cfg?.API_FILE_SERVER ?? '';\n  }, []);\n\n  const machineName = useMemo(() => {\n    if (!machineryData) return 'Sin nombre';\n    return (\n      machineryData.name ||\n      machineryData.machine_name ||\n      machineryData.machinery_name ||\n      machineryData.description ||\n      machineryData.type ||\n      'Sin nombre'\n    );\n  }, [machineryData]);\n\n  const litersValue = useMemo(() => {\n    const n = Number.parseFloat(liters);\n    return Number.isFinite(n) ? n : NaN;\n  }, [liters]);\n\n  const isLitersValid = useMemo(\n    () => Number.isFinite(litersValue) && litersValue > 0,\n    [litersValue],\n  );\n\n  const loadMachineryData = useCallback(async () => {\n    if (!machineryId) {\n      setError('ID de maquinaria no válido');\n      setMachineryData(null);\n      setLoadingMachinery(false);\n      return;\n    }\n\n    setLoadingMachinery(true);\n    setError(null);\n\n    try {\n      const machinery = await fetchMachineryById(machineryId);\n      if (!machinery) {\n        setError('No se encontró la máquina');\n        setMachineryData(null);\n        return;\n      }\n      setMachineryData(machinery);\n    } catch (err: any) {\n      console.error('Error al cargar datos de la máquina:', err);\n      setError(err?.message || 'Error al cargar los datos de la máquina');\n    } finally {\n      setLoadingMachinery(false);\n    }\n  }, [machineryId]);\n\n  useEffect(() => {\n    loadMachineryData();\n  }, [loadMachineryData]);\n\n  const loadFuelLoadData = useCallback(async () => {\n    if (!isEditMode || !fuelLoadId) return;\n    setLoadingFuelLoad(true);\n    setError(null);\n    try {\n      const fuelLoad: MachineryFuelLoad | null =\n        await fetchMachineryFuelLoadById(fuelLoadId);\n      if (!fuelLoad) {\n        setError('No se encontró la carga de combustible');\n        return;\n      }\n\n      setLiters(\n        fuelLoad.load_quantity?.toString?.() ??\n          String(fuelLoad.load_quantity ?? ''),\n      );\n\n      setFuelImage(fuelLoad.image ?? '');\n\n      if (fuelLoad.load_date) {\n        let dt: dayjs.Dayjs;\n        const raw = fuelLoad.load_date;\n        if (typeof raw === 'string') {\n          if (raw.includes('T') || raw.includes('Z')) {\n            dt = dayjs.utc(raw).local();\n          } else if (raw.includes(' ')) {\n            dt = dayjs.utc(raw, 'YYYY-MM-DD HH:mm:ss').local();\n          } else {\n            dt = dayjs(raw);\n          }\n        } else {\n          dt = dayjs(raw as any);\n        }\n\n        if (dt.isValid()) {\n          setLoadDate(dt.toDate());\n          setLoadTime(dt.format('HH:mm'));\n        }\n      }\n    } catch (err: any) {\n      console.error('Error al cargar datos de la carga de combustible:', err);\n      setError(err?.message || 'Error al cargar la carga de combustible');\n    } finally {\n      setLoadingFuelLoad(false);\n    }\n  }, [fuelLoadId, isEditMode]);\n\n  useEffect(() => {\n    loadFuelLoadData();\n  }, [loadFuelLoadData]);\n\n  const handleLitersChange = useCallback((t: string) => {\n    let raw = t.replace(/[^0-9.]/g, '');\n\n    const parts = raw.split('.');\n    if (parts.length > 2) {\n      raw = parts[0] + '.' + parts.slice(1).join('');\n    }\n\n    const finalParts = raw.split('.');\n    if (finalParts.length === 2 && finalParts[1].length > 1) {\n      raw = finalParts[0] + '.' + finalParts[1].substring(0, 1);\n    }\n\n    setLiters(prev => {\n      if (raw === prev) {\n        return prev;\n      }\n      return raw;\n    });\n    setError(null);\n  }, []);\n\n  const handlePickFile = useCallback(async () => {\n    setError(null);\n    try {\n      const results: any = await pickDocument({\n        allowMultiSelection: false,\n        type: ['image/*'],\n      });\n      const item = Array.isArray(results) ? results[0] : results;\n      const uri: string = item?.fileCopyUri || item?.uri || '';\n      const name: string = item?.name || 'fuel-load.jpg';\n      if (!uri) {\n        setError('No se pudo leer el archivo seleccionado');\n        return;\n      }\n      setIsUploadingImage(true);\n      const uploadedName = await uploadFileToServer(uri, name);\n      setFuelImage(uploadedName);\n      setLocalImageUri(uri);\n    } catch (e: any) {\n      if (\n        e?.code === 'DOCUMENT_PICKER_CANCELED' ||\n        e?.code === 'OPERATION_CANCELED' ||\n        e?.code === 'E_MODULE_NOT_LINKED'\n      ) {\n        return;\n      }\n      setError('No se pudo subir la imagen');\n    } finally {\n      setIsUploadingImage(false);\n    }\n  }, []);\n\n  const clearImage = useCallback(() => {\n    setFuelImage('');\n    setLocalImageUri('');\n  }, []);\n\n  const buildLoadDateFormatted = useCallback((): string => {\n    const base = loadDate ? dayjs(loadDate) : dayjs();\n    const parsed = parseHHmm(loadTime);\n    const withTime = parsed\n      ? base.hour(parsed.hh).minute(parsed.mm).second(0)\n      : base.second(0);\n    return withTime.format('YYYY-MM-DD HH:mm:ss');\n  }, [loadDate, loadTime]);\n\n  const submit = useCallback(async () => {\n    if (!machineryId) {\n      setError('ID de maquinaria no válido');\n      return;\n    }\n\n    setTouched(true);\n    if (!isLitersValid) {\n      setError('Por favor ingrese una cantidad válida de litros');\n      return;\n    }\n\n    setIsSaving(true);\n    setError(null);\n    try {\n      const loadDateFormatted = buildLoadDateFormatted();\n      const imageToSave = fuelImage || null;\n      if (isEditMode && fuelLoadId) {\n        await updateMachineryFuelLoad(\n          fuelLoadId,\n          loadDateFormatted,\n          litersValue,\n          imageToSave,\n        );\n      } else {\n        const fuelType = machineryData?.fuel_type?.toString().trim() || '';\n        if (!fuelType) {\n          setError(\n            'La maquinaria no tiene tipo de combustible configurado. Contacte al administrador.',\n          );\n          setIsSaving(false);\n          return;\n        }\n        const tank = await getTankByFuelType(fuelType);\n        if (!tank) {\n          setError(\n            `No se encontró tanque para el tipo de combustible \"${fuelType}\". Contacte al administrador.`,\n          );\n          setIsSaving(false);\n          return;\n        }\n\n        const { ok, stockActual } = await validateTankStock(\n          tank.id,\n          litersValue,\n        );\n        if (!ok) {\n          setError(\n            `Stock insuficiente en tanque de ${fuelType}. Disponible: ${stockActual} L, solicitado: ${litersValue} L.`,\n          );\n          setIsSaving(false);\n          return;\n        }\n\n        await insertMachineryFuelLoad(\n          machineryId,\n          loadDateFormatted,\n          litersValue,\n          imageToSave,\n          tank.id,\n          user?.id ?? null,\n        );\n      }\n\n      // @ts-ignore\n      navigation.replace(MACHINERY_SCREENS.PREVIEW, {\n        id: machineryId,\n        refresh: Date.now(),\n      });\n    } catch (err: any) {\n      console.error('Error al guardar carga de combustible:', err);\n      setError(\n        err?.message ||\n          (isEditMode\n            ? 'Error al actualizar la carga de combustible. Por favor, intente nuevamente.'\n            : 'Error al guardar la carga de combustible. Por favor, intente nuevamente.'),\n      );\n    } finally {\n      setIsSaving(false);\n    }\n  }, [\n    buildLoadDateFormatted,\n    isLitersValid,\n    litersValue,\n    machineryId,\n    machineryData,\n    isEditMode,\n    fuelLoadId,\n    fuelImage,\n    navigation,\n    user?.id,\n  ]);\n\n  const handleSaveClick = useCallback(() => {\n    setTouched(true);\n    if (!isLitersValid) {\n      setError('Por favor ingrese una cantidad válida de litros');\n      return;\n    }\n    setConfirmOpen(true);\n  }, [isLitersValid]);\n\n  useEffect(() => {\n    if (!touched) return;\n    if (liters === '') return;\n    if (!isLitersValid) {\n      setError('Por favor ingrese una cantidad válida de litros');\n    }\n  }, [touched, liters, isLitersValid]);\n\n  if (loadingMachinery) {\n    return (\n      <>\n        <View style={styles.container}>\n          <View style={styles.center}>\n            <LoadingSpinner />\n          </View>\n        </View>\n      </>\n    );\n  }\n\n  if (loadingFuelLoad) {\n    return (\n      <>\n        <View style={styles.container}>\n          <View style={styles.center}>\n            <LoadingSpinner />\n          </View>\n        </View>\n      </>\n    );\n  }\n\n  if (error && !machineryData) {\n    return (\n      <>\n        <View style={styles.container}>\n          <View style={styles.errorBox}>\n          <Text style={styles.errorIcon}>⚠️</Text>\n          <Text style={styles.errorTitle}>\n            {isEditMode\n              ? 'Error al cargar la carga'\n              : 'Error al cargar la máquina'}\n          </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}\n            </Text>\n          </View>\n          <TouchableOpacity\n            onPress={isEditMode ? loadFuelLoadData : loadMachineryData}\n            style={[styles.errorRetryButton, { backgroundColor: accentColor }]}\n            activeOpacity={0.85}\n          >\n            <Text style={styles.errorRetryButtonText}>Reintentar</Text>\n          </TouchableOpacity>\n        </View>\n      </View>\n    </>\n    );\n  }\n\n  return (\n    <>\n      <View style={styles.container}>\n        <ScrollView\n        style={styles.scroll}\n        contentContainerStyle={{\n          paddingTop: insets.top + 16,\n          paddingBottom: insets.bottom + 24,\n          paddingHorizontal: 16,\n        }}\n      >\n        {}\n        <View style={styles.headerCard}>\n          {machineryData ? (\n            <View style={styles.headerContent}>\n              <View style={styles.machineInfo}>\n                <Text style={styles.machineLabel}>MÁQUINA</Text>\n                <Text style={styles.machineName}>{machineName}</Text>\n              </View>\n              <View style={styles.plateInfo}>\n                <Text style={styles.plateLabel}>PLACA</Text>\n                <Text style={styles.plateValue}>\n                  {machineryData.plate || 'Sin placa'}\n                </Text>\n              </View>\n            </View>\n          ) : (\n            <Text style={styles.headerEmptyText}>\n              No se encontraron datos de la máquina\n            </Text>\n          )}\n        </View>\n\n        {}\n        <View style={styles.inputPanel}>\n          <View style={styles.inputPanelTop}>\n            <Text style={styles.inputHint}>\n              Ingrese la cantidad de litros cargados\n            </Text>\n            <View style={styles.litersCenter}>\n              <TextInput\n                value={liters}\n                onChangeText={handleLitersChange}\n                keyboardType=\"decimal-pad\"\n                placeholder=\"000\"\n                placeholderTextColor=\"#9CA3AF\"\n                style={styles.litersInput}\n                editable={!isSaving}\n                selectionColor=\"#111827\"\n              />\n              <Text style={styles.litersLabel}>Litros</Text>\n            </View>\n            <Text style={styles.fuelLabel}>COMBUSTIBLE</Text>\n            <Text style={styles.fuelValue}>\n              {formatFuelTypeLabel(machineryData?.fuel_type)}\n            </Text>\n          </View>\n        </View>\n\n        {}\n        <View style={styles.datetimeCard}>\n          <Text style={styles.datetimeTitle}>Fecha y hora de carga</Text>\n          <View style={styles.datetimeGrid}>\n            <View style={styles.datetimeItem}>\n              <DatePicker\n                label=\"Fecha\"\n                value={loadDate}\n                onChange={d => setLoadDate(d)}\n                disabled={isSaving}\n              />\n            </View>\n            <View style={styles.datetimeItem}>\n              <TimePicker\n                label=\"Hora\"\n                value={loadTime}\n                onChange={v => setLoadTime(v)}\n                disabled={isSaving}\n              />\n            </View>\n          </View>\n        </View>\n\n        {/* Foto de registro */}\n        <View style={styles.photoCard}>\n          <Text style={styles.photoTitle}>Foto de registro</Text>\n          <View style={styles.photoRow}>\n            <TouchableOpacity\n              onPress={handlePickFile}\n              disabled={isSaving || isUploadingImage}\n              style={[styles.photoButton, { backgroundColor: accentColor }, (isSaving || isUploadingImage) && styles.saveButtonDisabled]}\n              activeOpacity={0.85}\n            >\n              <Text style={styles.photoButtonText}>\n                {isUploadingImage ? 'Subiendo...' : 'Adjuntar foto'}\n              </Text>\n            </TouchableOpacity>\n            {fuelImage ? (\n              <TouchableOpacity\n                onPress={clearImage}\n                style={styles.clearButton}\n                activeOpacity={0.75}\n              >\n                <Text style={styles.clearButtonText}>Quitar</Text>\n              </TouchableOpacity>\n            ) : null}\n          </View>\n          {isUploadingImage ? (\n            <Text style={styles.uploadHint}>\n              Subiendo imagen, puede tardar unos segundos...\n            </Text>\n          ) : null}\n          {(!!localImageUri || (!!apiFileServer && !!fuelImage)) ? (\n            <View style={styles.imagePreviewContainer}>\n              <Image\n                source={{ uri: localImageUri || `${apiFileServer}/get/${fuelImage}` }}\n                style={styles.imagePreview}\n                resizeMode=\"cover\"\n              />\n            </View>\n          ) : null}\n        </View>\n\n        {/* Error message */}\n        {error && machineryData ? (\n          <View style={styles.inlineError}>\n            <Text style={styles.inlineErrorText}>{error}</Text>\n          </View>\n        ) : null}\n\n        {}\n        <View style={styles.actions}>\n          <TouchableOpacity\n            onPress={handleSaveClick}\n            disabled={isSaving || isUploadingImage || !liters}\n            style={[\n              styles.saveButton,\n              { backgroundColor: accentColor },\n              (isSaving || isUploadingImage || !liters) && styles.saveButtonDisabled,\n            ]}\n            activeOpacity={0.85}\n          >\n            <Text style={styles.saveButtonText}>\n              {isSaving ? 'Guardando...' : isUploadingImage ? 'Subiendo imagen...' : 'Guardar'}\n            </Text>\n          </TouchableOpacity>\n        </View>\n\n        <ConfirmationModal\n          open={confirmOpen}\n          onClose={() => setConfirmOpen(false)}\n          onConfirm={() => {\n            submit();\n          }}\n          title={\n            isEditMode\n              ? 'Confirmar actualización'\n              : 'Confirmar carga de combustible'\n          }\n          message={\n            isEditMode\n              ? `¿Confirma actualizar la carga a ${liters || '0'} L?`\n              : `¿Confirma cargar ${liters || '0'} L de combustible?`\n          }\n          confirmText=\"Confirmar\"\n          cancelText=\"Cancelar\"\n        />\n      </ScrollView>\n    </View>\n  </>\n  );\n}\n\nconst styles = StyleSheet.create({\n  container: { flex: 1, backgroundColor: '#FFFFFF' },\n  scroll: { flex: 1 },\n  center: { flex: 1, alignItems: 'center', justifyContent: 'center' },\n\n  headerCard: {\n    backgroundColor: '#FFFFFF',\n    borderRadius: 16,\n    padding: 16,\n    borderWidth: 1,\n    borderColor: '#E5E7EB',\n    marginBottom: 16,\n  },\n  headerContent: { gap: 12 },\n  machineInfo: {},\n  machineLabel: {\n    fontSize: 12,\n    letterSpacing: 1,\n    color: '#6B7280',\n    fontWeight: '700',\n  },\n  machineName: {\n    fontSize: 24,\n    fontWeight: '800',\n    color: '#111827',\n    marginTop: 6,\n  },\n  plateInfo: {},\n  plateLabel: {\n    fontSize: 12,\n    letterSpacing: 1,\n    color: '#6B7280',\n    fontWeight: '700',\n  },\n  plateValue: {\n    fontSize: 16,\n    fontWeight: '600',\n    color: '#374151',\n    marginTop: 6,\n  },\n  headerEmptyText: { textAlign: 'center', color: '#6B7280' },\n\n  inputPanel: {\n    borderRadius: 16,\n    borderWidth: 1,\n    borderColor: '#E5E7EB',\n    overflow: 'hidden',\n    marginBottom: 16,\n  },\n  inputPanelTop: {\n    paddingHorizontal: 16,\n    paddingVertical: 20,\n    backgroundColor: '#F9FAFB',\n    borderBottomWidth: 1,\n    borderBottomColor: '#E5E7EB',\n    alignItems: 'center',\n  },\n  inputHint: {\n    fontSize: 14,\n    fontWeight: '600',\n    color: '#4B5563',\n    marginBottom: 16,\n  },\n  litersCenter: { alignItems: 'center' },\n  litersInput: {\n    fontSize: 64,\n    fontWeight: '900',\n    color: '#111827',\n    width: '100%',\n    maxWidth: 320,\n    paddingVertical: 0,\n    paddingHorizontal: 0,\n    textAlign: 'center',\n    includeFontPadding: false,\n    textAlignVertical: 'center',\n  },\n  litersLabel: {\n    fontSize: 32,\n    fontWeight: '600',\n    color: '#374151',\n    marginTop: 8,\n  },\n  fuelLabel: {\n    marginTop: 20,\n    fontSize: 12,\n    letterSpacing: 2,\n    color: '#6B7280',\n    fontWeight: '700',\n  },\n  fuelValue: {\n    marginTop: 6,\n    fontSize: 18,\n    fontWeight: '800',\n    color: '#374151',\n  },\n\n  datetimeCard: {\n    borderRadius: 16,\n    borderWidth: 1,\n    borderColor: '#E5E7EB',\n    backgroundColor: '#FFFFFF',\n    padding: 16,\n    marginBottom: 16,\n  },\n  datetimeTitle: {\n    fontSize: 14,\n    fontWeight: '700',\n    color: '#374151',\n    marginBottom: 12,\n  },\n  datetimeGrid: { flexDirection: 'row', gap: 12 },\n  datetimeItem: { flex: 1 },\n\n  inlineError: {\n    padding: 12,\n    backgroundColor: '#FEF2F2',\n    borderRadius: 12,\n    borderWidth: 1,\n    borderColor: '#FECACA',\n  },\n  inlineErrorText: { color: '#991B1B', fontSize: 13, fontWeight: '600' },\n\n  actions: { marginTop: 8, alignItems: 'flex-end' },\n  saveButton: {\n    borderRadius: 10,\n    paddingHorizontal: 18,\n    paddingVertical: 12,\n    minWidth: 120,\n    alignItems: 'center',\n  },\n  saveButtonDisabled: { opacity: 0.6 },\n  saveButtonText: { color: '#FFFFFF', fontSize: 14, fontWeight: '800' },\n\n  errorBox: {\n    backgroundColor: '#FFFFFF',\n    borderRadius: 16,\n    padding: 16,\n    margin: 16,\n    borderWidth: 1,\n    borderColor: '#FEE2E2',\n    alignItems: 'center',\n  },\n  errorIcon: { fontSize: 28, marginBottom: 8 },\n  errorTitle: {\n    fontSize: 16,\n    fontWeight: '800',\n    color: '#111827',\n    textAlign: 'center',\n  },\n  errorSubtitle: {\n    fontSize: 13,\n    color: '#6B7280',\n    textAlign: 'center',\n    marginTop: 4,\n  },\n  errorMessageBox: {\n    marginTop: 10,\n    padding: 10,\n    borderRadius: 12,\n    backgroundColor: '#FEF2F2',\n    borderWidth: 1,\n    borderColor: '#FECACA',\n    width: '100%',\n  },\n  errorMessageText: { fontSize: 12, color: '#991B1B' },\n  errorRetryButton: {\n    marginTop: 12,\n    borderRadius: 10,\n    paddingHorizontal: 16,\n    paddingVertical: 10,\n  },\n  errorRetryButtonText: { color: '#FFFFFF', fontWeight: '800' },\n\n  photoCard: {\n    borderRadius: 16,\n    borderWidth: 1,\n    borderColor: '#E5E7EB',\n    backgroundColor: '#FFFFFF',\n    padding: 16,\n    marginBottom: 16,\n    gap: 12,\n  },\n  photoTitle: {\n    fontSize: 14,\n    fontWeight: '700',\n    color: '#374151',\n  },\n  photoRow: {\n    flexDirection: 'row',\n    alignItems: 'center',\n    gap: 10,\n  },\n  photoButton: {\n    borderRadius: 10,\n    paddingHorizontal: 16,\n    paddingVertical: 10,\n    alignItems: 'center',\n  },\n  photoButtonText: {\n    color: '#FFFFFF',\n    fontSize: 14,\n    fontWeight: '700',\n  },\n  clearButton: {\n    borderRadius: 8,\n    paddingHorizontal: 12,\n    paddingVertical: 8,\n    backgroundColor: '#F3F4F6',\n    borderWidth: 1,\n    borderColor: '#E5E7EB',\n  },\n  clearButtonText: {\n    fontSize: 13,\n    fontWeight: '600',\n    color: '#374151',\n  },\n  uploadHint: {\n    fontSize: 12,\n    color: '#6B7280',\n    fontStyle: 'italic',\n  },\n  imagePreviewContainer: {\n    borderRadius: 12,\n    overflow: 'hidden',\n    borderWidth: 1,\n    borderColor: '#E5E7EB',\n  },\n  imagePreview: {\n    width: '100%',\n    height: 200,\n  },\n});\n","import MachineNewFuelComponent from './MachineNewFuel';\n\nfunction MachineNewFuelScreen() {\n  return <MachineNewFuelComponent />;\n}\n\nexport default MachineNewFuelScreen;\n","export const safeParseParamId = (value: unknown): number | undefined => {\n  const parsed = Number(value);\n  \n  if (Number.isFinite(parsed) && parsed > 0) {\n    return parsed;\n  }\n\n  return undefined;\n};\n"],"names":["MachineNewFuel","formatFuelTypeLabel","fuelType","trim","normalized","charAt","toUpperCase","slice","toLowerCase","clientConfig","route","useRoute","navigation","useNavigation","insets","useSafeAreaInsets","machineryId","safeParseParamId","params","id","fuelLoadId","isEditMode","undefined","config","useAuth","user","defaultConfig","useMemo","configService","getDefaultConfig","accentColor","primaryColor","machineryData","useState","setMachineryData","loadingMachinery","setLoadingMachinery","loadingFuelLoad","setLoadingFuelLoad","liters","setLiters","Date","loadDate","setLoadDate","dayjs","format","loadTime","setLoadTime","fuelImage","setFuelImage","localImageUri","setLocalImageUri","isUploadingImage","setIsUploadingImage","touched","setTouched","error","setError","isSaving","setIsSaving","confirmOpen","setConfirmOpen","apiFileServer","cfg","getCurrentConfig","API_FILE_SERVER","machineName","name","machine_name","machinery_name","description","type","litersValue","n","Number","parseFloat","isFinite","NaN","isLitersValid","loadMachineryData","useCallback","machinery","fetchMachineryById","err","console","message","useEffect","loadFuelLoadData","fuelLoad","fetchMachineryFuelLoadById","load_quantity","toString","String","image","load_date","dt","raw","includes","utc","local","isValid","toDate","handleLitersChange","t","replace","parts","split","length","join","finalParts","substring","prev","handlePickFile","results","pickDocument","allowMultiSelection","item","Array","isArray","uri","fileCopyUri","uploadedName","uploadFileToServer","e","code","clearImage","buildLoadDateFormatted","base","parsed","value","m","exec","hh","mm","parseHHmm","hour","minute","second","submit","loadDateFormatted","imageToSave","updateMachineryFuelLoad","fuel_type","tank","getTankByFuelType","validateTankStock","ok","stockActual","insertMachineryFuelLoad","MACHINERY_SCREENS","PREVIEW","refresh","now","handleSaveClick","View","style","styles","container","center","LoadingSpinner","errorBox","Text","errorIcon","errorTitle","errorSubtitle","errorMessageBox","errorMessageText","numberOfLines","TouchableOpacity","onPress","errorRetryButton","backgroundColor","activeOpacity","errorRetryButtonText","ScrollView","scroll","contentContainerStyle","paddingTop","top","paddingBottom","bottom","paddingHorizontal","headerCard","headerContent","machineInfo","machineLabel","plateInfo","plateLabel","plateValue","plate","headerEmptyText","inputPanel","inputPanelTop","inputHint","litersCenter","TextInput","onChangeText","keyboardType","placeholder","placeholderTextColor","litersInput","editable","selectionColor","litersLabel","fuelLabel","fuelValue","datetimeCard","datetimeTitle","datetimeGrid","datetimeItem","DatePicker","label","onChange","d","disabled","TimePicker","v","photoCard","photoTitle","photoRow","photoButton","saveButtonDisabled","photoButtonText","clearButton","clearButtonText","uploadHint","imagePreviewContainer","Image","source","imagePreview","resizeMode","inlineError","inlineErrorText","actions","saveButton","saveButtonText","ConfirmationModal","open","onClose","onConfirm","title","confirmText","cancelText","extend","StyleSheet","create","flex","alignItems","justifyContent","borderRadius","padding","borderWidth","borderColor","marginBottom","gap","fontSize","letterSpacing","color","fontWeight","marginTop","textAlign","overflow","paddingVertical","borderBottomWidth","borderBottomColor","width","maxWidth","includeFontPadding","textAlignVertical","flexDirection","minWidth","opacity","margin","fontStyle","height"],"mappings":"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"}