"use client"; import Link from "next/link"; import { useEffect, useState } from "react"; import { browserFetch } from "../lib/api"; type FavoriteMaker = { id: string; slug: string; business_name: string; city: string | null; province: string | null; main_image_url: string | null; availability: string | null; avg_rating: number | string; review_count: number; }; type FavoriteWork = { id: string; slug: string; title: string; summary: string; technology: string; material: string; image_url: string; maker_slug: string; maker_name: string; }; type FavoritesResponse = { makers: FavoriteMaker[]; works: FavoriteWork[]; }; function rating(value: number | string) { const parsed = typeof value === "number" ? value : Number(value); return Number.isFinite(parsed) ? parsed.toFixed(1) : "0.0"; } export default function FavoritesClient() { const [activeTab, setActiveTab] = useState<"makers" | "works">("makers"); const [favorites, setFavorites] = useState({ makers: [], works: [] }); const [loading, setLoading] = useState(true); const [needsLogin, setNeedsLogin] = useState(false); const [status, setStatus] = useState(""); async function loadFavorites() { setStatus(""); try { const response = await browserFetch("/favorites"); setFavorites(response); setNeedsLogin(false); } catch (error) { const message = error instanceof Error ? error.message : ""; if (message.includes("Authentication")) { setNeedsLogin(true); return; } setStatus("No se pudieron cargar tus favoritos."); } finally { setLoading(false); } } useEffect(() => { void loadFavorites(); }, []); async function removeFavorite(type: "maker" | "work", id: string) { const endpoint = type === "maker" ? `/favorites/makers/${id}` : `/favorites/works/${id}`; await browserFetch(endpoint, { method: "DELETE" }); await loadFavorites(); } if (loading) { return (
Favoritos

Cargando guardados

Estamos preparando tus makers y trabajos favoritos.

); } if (needsLogin) { return (
Favoritos

Inicia sesion para guardar favoritos

Tus makers y trabajos guardados quedan asociados a tu cuenta para recuperarlos desde cualquier pestana.

Entrar
); } const visibleMakers = activeTab === "makers"; const empty = visibleMakers ? favorites.makers.length === 0 : favorites.works.length === 0; return (
Favoritos

Guardados para volver rapido

Separados por makers y trabajos para que puedas comparar proveedores o ejemplos concretos.

{favorites.makers.length} makers {favorites.works.length} trabajos
{status ?

{status}

: null} {empty ? (

{visibleMakers ? "Todavia no guardaste makers" : "Todavia no guardaste trabajos"}

Usa el boton Guardar desde un perfil de maker o desde el detalle de un trabajo.

Descubrir makers
) : null} {visibleMakers ? (
{favorites.makers.map((maker) => (
{maker.business_name}
{maker.business_name} {maker.city || "Cordoba"}, {maker.province || "Argentina"}
Rating {rating(maker.avg_rating)} {maker.review_count} resenas {maker.availability || "available"}
Ver perfil
))}
) : (
{favorites.works.map((work) => (
{work.title}
{work.title} {work.maker_name}

{work.summary}

{work.technology} {work.material}
Ver trabajo
))}
)}
); }