import React, { useState, useEffect } from 'react'; import PharmacyMap from '../components/PharmacyMap'; import './ProductView.css'; export default function ProductView({ source, id, onBack }) { const [product, setProduct] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [pharmacies, setPharmacies] = useState([]); const [loadingPharmacies, setLoadingPharmacies] = useState(false); useEffect(() => { loadProduct(); }, [source, id]); async function loadProduct() { setLoading(true); setError(null); setPharmacies([]); try { // Use parapharmacy endpoint for all non-CIMA sources const isCima = source === 'cima'; const apiUrl = isCima ? `/api/products/${source}/${id}` : `/api/products/parapharmacy/${id}`; const response = await fetch(apiUrl); if (!response.ok) { throw new Error('Producto no encontrado'); } const data = await response.json(); setProduct(data); loadPharmacies(source, data.id || data._id); } catch (err) { setError(err.message); } finally { setLoading(false); } } async function loadPharmacies(productSource, productId) { setLoadingPharmacies(true); try { const response = await fetch(`/api/products/${productSource}/${productId}/pharmacies`); if (response.ok) { const data = await response.json(); setPharmacies(data); } } catch { // Pharmacies are optional — don't block on failure } finally { setLoadingPharmacies(false); } } if (loading) { return (
Cargando...
); } if (error) { return (
{error}
); } if (!product) return null; const isCima = product.source === 'cima'; const isParapharmacy = product.source !== 'cima'; const sourceColor = isCima ? '#2563eb' : '#16a34a'; const sourceLabel = isCima ? 'CIMA' : 'Parafarmacia'; return (
{product.image_url && ( {product.name} )} {sourceLabel}

{product.name}

{product.brand}

{isCima ? ( <> {product.active_ingredient && ( )} {product.dosage && ( )} {product.form && ( )} {product.prescription && ( )} {product.commercialized !== undefined && ( )} ) : ( <> {product.price && ( )} {product.original_price && product.original_price > product.price && ( )} {product.category && ( )} {product.brand && ( )} {product.source_url && ( )} )}
{loadingPharmacies ? (
Cargando farmacias...
) : pharmacies.length > 0 ? ( <>

Disponible en {pharmacies.length} {pharmacies.length === 1 ? 'farmacia' : 'farmacias'}

{pharmacies.map((pharmacy) => (

{pharmacy.name}

{pharmacy.address}

{pharmacy.phone && (

{pharmacy.phone}

)}
{pharmacy.price && ( {parseFloat(pharmacy.price).toFixed(2)} € )} {pharmacy.stock !== undefined && ( 20 ? 'in-stock' : pharmacy.stock > 0 ? 'low-stock' : 'out-of-stock'}`}> {pharmacy.stock > 20 ? 'En Stock' : pharmacy.stock > 0 ? `Stock Bajo (${pharmacy.stock})` : 'Sin Stock'} )}
))}
) : null}
); } function DetailRow({ label, value }) { return (
{label} {value}
); }