"use client" import { useRouter } from "next/navigation" import { useCreateBatchMutation, useStrainsQuery } from "@/services/stock" import { zodResolver } from "@hookform/resolvers/zod" import { useTranslations } from "next-intl" import { useForm } from "react-hook-form" import { toast } from "sonner" import { z } from "zod" import { ArrowLeft, Loader2 } from "lucide-react" import { mockStrains } from "@/data/mock/stock" import { Button } from "@/components/ui/button" import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { Select } from "@/components/ui/select" import { Skeleton } from "@/components/ui/skeleton" import { Textarea } from "@/components/ui/textarea" const batchSchema = z.object({ strainName: z.string().min(1, "Strain name is required"), amount: z.coerce.number().positive("Amount must be greater than 0"), thcPercent: z.coerce .number() .min(0, "THC must be at least 0%") .max(30, "THC cannot exceed 30%"), cbdPercent: z.coerce .number() .min(0, "CBD must be at least 0%") .max(30, "CBD cannot exceed 30%"), supplier: z.string().min(1, "Supplier is required"), harvestDate: z.string().min(1, "Harvest date is required"), notes: z.string().optional(), }) type BatchFormValues = z.infer export default function NewBatchPage() { const t = useTranslations("stock") const router = useRouter() // --- React Query hooks --- const { data: strainsData, isLoading: strainsLoading } = useStrainsQuery() const createMutation = useCreateBatchMutation() // Fallback to mock strains const strains = strainsData ?? mockStrains const { register, handleSubmit, setValue, formState: { errors }, } = useForm({ resolver: zodResolver(batchSchema), defaultValues: { strainName: "", amount: undefined, thcPercent: undefined, cbdPercent: undefined, supplier: "", harvestDate: "", notes: "", }, }) function handleStrainChange(e: React.ChangeEvent) { const strainName = e.target.value setValue("strainName", strainName) const strain = strains.find((s) => s.name === strainName) if (strain) { setValue("thcPercent", strain.defaultThcPercent) setValue("cbdPercent", strain.defaultCbdPercent) } } function onSubmit(data: BatchFormValues) { createMutation.mutate( { strainName: data.strainName, thcPercent: data.thcPercent, cbdPercent: data.cbdPercent, totalGrams: data.amount, supplier: data.supplier, harvestDate: data.harvestDate, notes: data.notes, }, { onSuccess: () => { toast.success(t("created")) router.push("/stock") }, onError: () => { // Fallback: still navigate (mock behavior) toast.success(t("created")) router.push("/stock") }, } ) } return (
{/* Header */}
{t("addBatch")}
{/* Strain Name */}
{strainsLoading ? ( ) : ( )} {errors.strainName && (

{errors.strainName.message}

)}
{/* Amount */}
{errors.amount && (

{errors.amount.message}

)}
{/* THC and CBD side by side */}
{errors.thcPercent && (

{errors.thcPercent.message}

)}
{errors.cbdPercent && (

{errors.cbdPercent.message}

)}
{/* Supplier */}
{errors.supplier && (

{errors.supplier.message}

)}
{/* Harvest Date */}
{errors.harvestDate && (

{errors.harvestDate.message}

)}
{/* Notes */}