import React, { useState } from "react"; import { Users, Camera, Mail, Phone, MapPin, Star, Plus, Search, Filter, User, Upload, X, } from "lucide-react"; import { Button } from "../components/Button"; interface Photographer { id: string; name: string; email: string; phone: string; location: string; specialties: string[]; rating: number; eventsCompleted: number; status: "active" | "inactive" | "busy"; avatar: string; joinDate: string; } const MOCK_PHOTOGRAPHERS: Photographer[] = [ { id: "1", name: "Carlos Silva", email: "carlos.silva@photum.com", phone: "(41) 99999-1111", location: "Curitiba, PR", specialties: ["Formaturas", "Eventos Corporativos"], rating: 4.8, eventsCompleted: 45, status: "active", avatar: "https://i.pravatar.cc/150?img=12", joinDate: "2023-01-15", }, { id: "2", name: "Ana Paula Mendes", email: "ana.mendes@photum.com", phone: "(41) 99999-2222", location: "Curitiba, PR", specialties: ["Casamentos", "Formaturas"], rating: 4.9, eventsCompleted: 62, status: "busy", avatar: "https://i.pravatar.cc/150?img=5", joinDate: "2022-08-20", }, { id: "3", name: "Roberto Costa", email: "roberto.costa@photum.com", phone: "(41) 99999-3333", location: "São José dos Pinhais, PR", specialties: ["Formaturas", "Eventos Sociais"], rating: 4.7, eventsCompleted: 38, status: "active", avatar: "https://i.pravatar.cc/150?img=33", joinDate: "2023-03-10", }, { id: "4", name: "Juliana Santos", email: "juliana.santos@photum.com", phone: "(41) 99999-4444", location: "Curitiba, PR", specialties: ["Casamentos", "Ensaios"], rating: 5.0, eventsCompleted: 71, status: "active", avatar: "https://i.pravatar.cc/150?img=9", joinDate: "2022-05-12", }, { id: "5", name: "Fernando Oliveira", email: "fernando.oliveira@photum.com", phone: "(41) 99999-5555", location: "Pinhais, PR", specialties: ["Eventos Corporativos", "Formaturas"], rating: 4.6, eventsCompleted: 29, status: "inactive", avatar: "https://i.pravatar.cc/150?img=15", joinDate: "2023-07-01", }, { id: "6", name: "Mariana Rodrigues", email: "mariana.rodrigues@photum.com", phone: "(41) 99999-6666", location: "Curitiba, PR", specialties: ["Formaturas", "Eventos Sociais", "Casamentos"], rating: 4.9, eventsCompleted: 54, status: "busy", avatar: "https://i.pravatar.cc/150?img=10", joinDate: "2022-11-05", }, ]; export const TeamPage: React.FC = () => { const [searchTerm, setSearchTerm] = useState(""); const [statusFilter, setStatusFilter] = useState< "all" | "active" | "busy" | "inactive" >("all"); const [selectedPhotographer, setSelectedPhotographer] = useState(null); const [showAddModal, setShowAddModal] = useState(false); const [newPhotographer, setNewPhotographer] = useState({ name: "", email: "", phone: "", location: "", specialties: [] as string[], avatar: "", }); const [avatarFile, setAvatarFile] = useState(null); const [avatarPreview, setAvatarPreview] = useState(""); const handleAvatarChange = (e: React.ChangeEvent) => { const file = e.target.files?.[0]; if (file) { setAvatarFile(file); const reader = new FileReader(); reader.onloadend = () => { setAvatarPreview(reader.result as string); }; reader.readAsDataURL(file); } }; const removeAvatar = () => { setAvatarFile(null); setAvatarPreview(""); }; const getStatusColor = (status: Photographer["status"]) => { switch (status) { case "active": return "bg-green-100 text-green-800"; case "busy": return "bg-yellow-100 text-yellow-800"; case "inactive": return "bg-gray-100 text-gray-800"; } }; const getStatusLabel = (status: Photographer["status"]) => { switch (status) { case "active": return "Disponível"; case "busy": return "Em Evento"; case "inactive": return "Inativo"; } }; const filteredPhotographers = MOCK_PHOTOGRAPHERS.filter((photographer) => { const matchesSearch = photographer.name.toLowerCase().includes(searchTerm.toLowerCase()) || photographer.email.toLowerCase().includes(searchTerm.toLowerCase()); const matchesStatus = statusFilter === "all" || photographer.status === statusFilter; return matchesSearch && matchesStatus; }); const stats = { total: MOCK_PHOTOGRAPHERS.length, active: MOCK_PHOTOGRAPHERS.filter((p) => p.status === "active").length, busy: MOCK_PHOTOGRAPHERS.filter((p) => p.status === "busy").length, avgRating: ( MOCK_PHOTOGRAPHERS.reduce((acc, p) => acc + p.rating, 0) / MOCK_PHOTOGRAPHERS.length ).toFixed(1), }; return (
{/* Header */}

Equipe & Fotógrafos

Gerencie sua equipe de fotógrafos profissionais

{/* Stats */}

Total de Fotógrafos

{stats.total}

Disponíveis

{stats.active}

Em Evento

{stats.busy}

Avaliação Média

{stats.avgRating}

{/* Filters and Search */}
setSearchTerm(e.target.value)} className="w-full pl-10 pr-4 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-brand-gold" />
{/* Photographers Grid */}
{filteredPhotographers.map((photographer) => (
setSelectedPhotographer(photographer)} >
{photographer.name}

{photographer.name}

{photographer.rating} ({photographer.eventsCompleted} eventos)
{getStatusLabel(photographer.status)}
{photographer.email}
{photographer.phone}
{photographer.location}
{photographer.specialties.map((specialty, index) => ( {specialty} ))}
))}
{filteredPhotographers.length === 0 && (

Nenhum fotógrafo encontrado

)}
{/* Add Photographer Modal */} {showAddModal && (
setShowAddModal(false)} >
e.stopPropagation()} >

Adicionar Novo Fotógrafo

{ e.preventDefault(); alert( "Fotógrafo adicionado com sucesso!\n\n" + JSON.stringify( { ...newPhotographer, avatarFile: avatarFile?.name }, null, 2 ) ); setShowAddModal(false); setNewPhotographer({ name: "", email: "", phone: "", location: "", specialties: [], avatar: "", }); setAvatarFile(null); setAvatarPreview(""); }} >
{avatarPreview ? (
Preview
) : (
)}

JPG, PNG ou GIF (máx. 5MB)

{avatarFile && (

{avatarFile.name}

)}
setNewPhotographer({ ...newPhotographer, name: e.target.value, }) } placeholder="Ex: João Silva" className="w-full pl-10 pr-4 py-3 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-brand-gold" />
setNewPhotographer({ ...newPhotographer, email: e.target.value, }) } placeholder="joao.silva@photum.com" className="w-full pl-10 pr-4 py-3 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-brand-gold" />
setNewPhotographer({ ...newPhotographer, phone: e.target.value, }) } placeholder="(41) 99999-0000" className="w-full pl-10 pr-4 py-3 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-brand-gold" />
setNewPhotographer({ ...newPhotographer, location: e.target.value, }) } placeholder="Curitiba, PR" className="w-full pl-10 pr-4 py-3 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-brand-gold" />
{[ "Formaturas", "Casamentos", "Eventos Corporativos", "Eventos Sociais", "Ensaios", ].map((specialty) => ( ))}
)} {/* Photographer Detail Modal */} {selectedPhotographer && (
setSelectedPhotographer(null)} >
e.stopPropagation()} >
{selectedPhotographer.name}

{selectedPhotographer.name}

{selectedPhotographer.rating} ({selectedPhotographer.eventsCompleted} eventos concluídos)
{getStatusLabel(selectedPhotographer.status)}
{selectedPhotographer.email}
{selectedPhotographer.phone}
{selectedPhotographer.location}

Especialidades

{selectedPhotographer.specialties.map((specialty, index) => ( {specialty} ))}
)}
); };