'use client'; import React, { useState, useEffect } from 'react'; interface IngredientDetail { _id: string; code: string; name: string; category: string; subcategory: string; quantity: number; unit: string; unitPrice: number; vat: number; supplier: string; discountType?: 'value' | 'percent'; discountValue?: number; applyDiscountToNet?: boolean; minStockLevel?: number; storageInstructions?: string; shelfLifeDays?: number; notes?: string; createdAt: string; updatedAt: string; } interface ViewIngredientModalProps { open: boolean; ingredientId: string | null; onClose: () => void; } export default function ViewIngredientModal({ open, ingredientId, onClose }: ViewIngredientModalProps) { const [ingredient, setIngredient] = useState(null); const [loading, setLoading] = useState(false); useEffect(() => { if (!open || !ingredientId) return; setLoading(true); setIngredient(null); fetch(`/api/ingredients/${ingredientId}`) .then(r => r.json()) .then(data => { setIngredient(data); setLoading(false); }); }, [open, ingredientId]); if (!open) return null; const fmt = (n: number) => n < 0 ? `-\u20AC${Math.abs(n).toFixed(2)}` : `\u20AC${n.toFixed(2)}`; const netPrice = ingredient ? ingredient.unitPrice * (1 + ingredient.vat / 100) : 0; const hasDiscount = ingredient && ingredient.discountValue && ingredient.discountValue > 0; const hasAdvanced = ingredient && (ingredient.minStockLevel || ingredient.storageInstructions || ingredient.shelfLifeDays || ingredient.notes); return (
{/* Header */}

Ingredient Details

{/* Body */}
{loading && (
Loading...
)} {!loading && ingredient && (
{/* Name & Code */}

{ingredient.name}

Code: {ingredient.code}

{/* Category / Subcategory */}

Category

{ingredient.category}

Subcategory

{ingredient.subcategory}

{/* Quantity / Unit */}

Quantity

{ingredient.quantity} {ingredient.unit}

Supplier

{ingredient.supplier}

{/* Pricing */}

Pricing

Gross Price

{fmt(ingredient.unitPrice)}

VAT

{ingredient.vat}%

Net Price

{fmt(netPrice)}

{/* Discount */} {hasDiscount && (

Discount

Type

{ingredient.discountType === 'percent' ? 'Percentage' : 'Fixed value'}

Value

{ingredient.discountType === 'percent' ? `${ingredient.discountValue}%` : fmt(ingredient.discountValue!)}

{ingredient.applyDiscountToNet && (

Applied to net price

)}
)} {/* Advanced */} {hasAdvanced && (

Additional Details

{ingredient.minStockLevel != null && (

Min Stock Level

{ingredient.minStockLevel}

)} {ingredient.shelfLifeDays != null && (

Shelf Life

{ingredient.shelfLifeDays} days

)} {ingredient.storageInstructions && (

Storage Instructions

{ingredient.storageInstructions}

)} {ingredient.notes && (

Notes

{ingredient.notes}

)}
)} {/* Timestamps */}

Created

{new Date(ingredient.createdAt).toLocaleString()}

Updated

{new Date(ingredient.updatedAt).toLocaleString()}

)}
{/* Footer */}
); }