import { router } from "expo-router"; import { useMemo, useState } from "react"; import { Alert, Image, ScrollView, View } from "react-native"; import { Badge } from "@/components/ui/Badge"; import { Button } from "@/components/ui/Button"; import { Card } from "@/components/ui/Card"; import { Chip } from "@/components/ui/Chip"; import { Field } from "@/components/ui/Field"; import { AppHeader } from "@/components/ui/Header"; import { Screen } from "@/components/ui/Screen"; import { Text } from "@/components/ui/Text"; import { products } from "@/lib/data/products"; import { routes } from "@/lib/routes"; import { useAuthStore } from "@/lib/stores/authStore"; import { useCartStore } from "@/lib/stores/cartStore"; import { useFamilyStore } from "@/lib/stores/familyStore"; import { useLocationStore } from "@/lib/stores/locationStore"; import { usePrescriptionStore } from "@/lib/stores/prescriptionStore"; import { colors, gutter, radii } from "@/lib/theme"; function matchStatus(name: string): "ready" | "review" | "unavailable" { const hit = products.find((p) => p.name.toLowerCase().includes(name.trim().toLowerCase()) ); if (!hit) return "review"; if (!hit.inStock) return "unavailable"; return "ready"; } export default function RxReviewScreen() { const draftImages = usePrescriptionStore((s) => s.draftImages); const setDraftImages = usePrescriptionStore((s) => s.setDraftImages); const addPrescription = usePrescriptionStore((s) => s.addPrescription); const addProduct = useCartStore((s) => s.addProduct); const setFulfillment = useLocationStore((s) => s.setFulfillment); const user = useAuthStore((s) => s.user); const members = useFamilyStore((s) => s.members); const activeMemberId = useFamilyStore((s) => s.activeMemberId); const activeMember = members.find((m) => m.id === activeMemberId); const [patientName, setPatientName] = useState( activeMember?.name || user?.name || "" ); const [memberId, setMemberId] = useState(activeMemberId); const [medicineName, setMedicineName] = useState("Metformin 500mg"); const [daysSupply, setDaysSupply] = useState("30"); const [list, setList] = useState("Metformin 500mg, Vitamin B12"); const [notes, setNotes] = useState(""); const medicines = useMemo(() => { return list .split(",") .map((s) => s.trim()) .filter(Boolean) .map((name) => ({ name, status: matchStatus(name) })); }, [list]); const save = (toCart: boolean) => { if (!draftImages.length) { Alert.alert("Image required", "Scan or upload at least one prescription photo first."); return; } if (!patientName.trim() || !medicineName.trim()) { Alert.alert("Missing", "Patient and primary medicine are required."); return; } const meds = medicines.length > 0 ? medicines : [{ name: medicineName, status: matchStatus(medicineName) }]; const rx = addPrescription({ patientName: patientName.trim(), memberId, medicineName: medicineName.trim(), medicines: meds, imageUris: draftImages, daysSupply: Number(daysSupply) || 30, lastFilledAt: null, notes: notes.trim(), }); if (toCart) { meds .filter((m) => m.status === "ready") .forEach((m) => { const p = products.find((x) => x.name.toLowerCase().includes(m.name.toLowerCase().split(" ")[0]) ); if (p) addProduct(p); }); setFulfillment("pickup"); } setDraftImages([]); Alert.alert("Saved", "Prescription submitted for pharmacist review", [ { text: "Open details", onPress: () => router.replace(routes.rxDetail(rx.id)) }, { text: "Reminders", onPress: () => router.replace(routes.rxCalendar(rx.id)) }, { text: "List", onPress: () => router.replace(routes.rxList) }, ]); }; return ( {draftImages.length ? ( {draftImages.map((uri) => ( ))} ) : ( No images attached Go back to scan or upload a prescription photo.