'use client'; import { useEffect, useState } from 'react'; import Link from 'next/link'; import { PawPrint, Plus, Calendar, Settings, ChevronRight, AlertTriangle } from 'lucide-react'; interface Animal { id: string; name: string; species: string; breed: string; status: string; urgent: boolean; photos: { url: string }[]; } interface Reservation { id: string; date: string; status: string; user: { name: string; email: string }; animal: { name: string }; } const statusBg: Record = { AVAILABLE: 'rgba(58,99,71,0.1)', RESERVED: 'rgba(212,136,10,0.1)', ADOPTED: 'rgba(35,20,8,0.08)', }; const statusColor: Record = { AVAILABLE: 'var(--sage)', RESERVED: 'var(--amber)', ADOPTED: 'var(--soil-mid)', }; const statusLabel: Record = { AVAILABLE: 'Disponível', RESERVED: 'Reservado', ADOPTED: 'Adoptado', }; export default function ShelterDashboardPage() { const [animals, setAnimals] = useState([]); const [reservations, setReservations] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { // TODO: substituir por API routes de shelter quando autenticação de canil estiver completa // Por agora usa mock setTimeout(() => { setAnimals([ { id: 'mock-1', name: 'Bobi', species: 'DOG', breed: 'Labrador', status: 'AVAILABLE', urgent: false, photos: [{ url: 'https://images.unsplash.com/photo-1587300003388-59208cc962cb?w=120&q=80' }] }, { id: 'mock-2', name: 'Luna', species: 'CAT', breed: 'Siamês', status: 'RESERVED', urgent: true, photos: [{ url: 'https://images.unsplash.com/photo-1514888286974-6c03e2ca1dba?w=120&q=80' }] }, { id: 'mock-3', name: 'Nala', species: 'DOG', breed: 'Golden Retriever', status: 'AVAILABLE', urgent: false, photos: [{ url: 'https://images.unsplash.com/photo-1601758125946-6ec2ef64daf8?w=120&q=80' }] }, ]); setReservations([ { id: 'r1', date: new Date(Date.now() + 86400000 * 2).toISOString(), status: 'PENDING', user: { name: 'Ana Costa', email: 'ana@email.pt' }, animal: { name: 'Luna' } }, { id: 'r2', date: new Date(Date.now() + 86400000 * 5).toISOString(), status: 'CONFIRMED', user: { name: 'João Silva', email: 'joao@email.pt' }, animal: { name: 'Bobi' } }, ]); setLoading(false); }, 600); }, []); if (loading) { return (
{[1,2,3].map(i =>
)}
); } const available = animals.filter(a => a.status === 'AVAILABLE').length; const reserved = animals.filter(a => a.status === 'RESERVED').length; const urgent = animals.filter(a => a.urgent).length; const pending = reservations.filter(r => r.status === 'PENDING').length; return (
{/* Header */}

Painel do canil

Dashboard

Adicionar animal
{/* Stats */}
{[ { label: 'Disponíveis', value: available, color: 'var(--sage)', emoji: '🐾' }, { label: 'Reservados', value: reserved, color: 'var(--amber)', emoji: '📅' }, { label: 'Urgentes', value: urgent, color: 'var(--terra)', emoji: '⚠️' }, { label: 'Reservas pend.', value: pending, color: 'var(--soil-mid)', emoji: '📋' }, ].map(({ label, value, color, emoji }) => (
{emoji}
{value}
{label}
))}
{/* Reservas pendentes */} {reservations.length > 0 && (

Próximas reservas

{reservations.map(r => (
{r.user.name} → {r.animal.name}
{new Date(r.date).toLocaleDateString('pt-PT', { weekday: 'long', day: 'numeric', month: 'long' })}
{r.status === 'PENDING' ? 'Pendente' : 'Confirmada'}
))}
)} {/* Animais */}

Os teus animais

{animals.map(animal => (
{animal.photos[0] && ( {animal.name} )}
{animal.name} {animal.urgent && }
{animal.species === 'DOG' ? 'Cão' : 'Gato'} · {animal.breed}
{statusLabel[animal.status]}
))}
); }