import React, { useState, useEffect } from 'react'; import { Building, Hotel, UtensilsCrossed, Car, Store, Users, MapPin, Star, Phone, Mail, Plus, Search, Edit, Trash2, Eye, CheckCircle, XCircle, Clock, Map, Shield } from 'lucide-react'; import { useAdminData } from '@/hooks/useAdminData'; interface ServicesTabProps { establishments: any[]; isAdmin: boolean; isSuperAdmin: boolean; loadEstablishments: (type?: string) => void; } const ServicesTab: React.FC = ({ establishments, isAdmin, loadEstablishments }) => { const { updateEstablishment, deleteEstablishment } = useAdminData(); const [activeFilter, setActiveFilter] = useState('all'); const [searchTerm, setSearchTerm] = useState(''); useEffect(() => { loadEstablishments(activeFilter === 'all' ? undefined : activeFilter); }, [activeFilter]); const serviceTypes = [ { id: 'all', label: 'Todos', icon: Building, count: establishments.length }, { id: 'hotel', label: 'Hoteles', icon: Hotel, count: establishments.filter(e => e.type === 'hotel').length }, { id: 'restaurant', label: 'Restaurantes', icon: UtensilsCrossed, count: establishments.filter(e => e.type === 'restaurant').length }, { id: 'taxi', label: 'Taxis', icon: Car, count: establishments.filter(e => e.type === 'taxi').length }, { id: 'shop', label: 'Tiendas', icon: Store, count: establishments.filter(e => e.type === 'shop').length }, { id: 'guide', label: 'Guías Turísticos', icon: Map, count: establishments.filter(e => e.type === 'guide').length }, { id: 'security', label: 'Politur', icon: Shield, count: establishments.filter(e => e.type === 'security').length }, ]; const filteredEstablishments = establishments.filter(establishment => establishment.name?.toLowerCase().includes(searchTerm.toLowerCase()) || establishment.description?.toLowerCase().includes(searchTerm.toLowerCase()) ); const handleUpdateStatus = async (id: string, status: 'active' | 'suspended' | 'pending') => { const result = await updateEstablishment(id, { status }); if (result.success) { loadEstablishments(activeFilter === 'all' ? undefined : activeFilter); } }; const handleDelete = async (id: string) => { if (window.confirm('¿Estás seguro de que quieres eliminar este establecimiento?')) { const result = await deleteEstablishment(id); if (result.success) { loadEstablishments(activeFilter === 'all' ? undefined : activeFilter); } } }; return (
{/* Header */}

Proveedores de Servicios

{/* Service Type Filters */}
{serviceTypes.map((type) => { const Icon = type.icon; return ( ); })}
{/* Search */}
setSearchTerm(e.target.value)} className="w-full pl-10 pr-4 py-2 border rounded-lg focus:outline-none focus:ring-2 focus:ring-orange-500" />
{/* Establishments Grid */}
{filteredEstablishments.map((establishment) => (
{/* Image */}
{establishment.name}
{establishment.status}
{/* Content */}

{establishment.name}

{establishment.rating || 0}

{establishment.description}

{establishment.location?.address}
{establishment.owner && (
{establishment.owner.name}
)}
{/* Actions */}
{establishment.status === 'pending' && (
)}
))}
{filteredEstablishments.length === 0 && (

No hay establecimientos

No se encontraron establecimientos que coincidan con los filtros aplicados.

)}
); }; export default ServicesTab;