"use client" import { useState, useEffect } from "react" import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "@/components/ui/card" import { Button } from "@/components/ui/button" import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar" import { Badge } from "@/components/ui/badge" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select" import { Input } from "@/components/ui/input" import { Search, Filter, Mail, Phone, FileText, Calendar, MessageSquare, MoreVertical, Eye, Check, X, Clock, Star, } from "lucide-react" // Mock data - in production this would come from API const mockApplications = [ { id: "1", candidateName: "Ana Silva", email: "ana.silva@email.com", phone: "+55 11 99999-1111", jobTitle: "Senior Full Stack Developer", appliedAt: "2 hours ago", status: "pending", resumeUrl: "https://cdn.gohorsejobs.com/docs/ana_silva_cv.pdf", message: "Tenho 5 anos de experiência como desenvolvedora Full Stack...", }, { id: "2", candidateName: "Carlos Santos", email: "carlos.santos@email.com", phone: "+55 11 98888-2222", jobTitle: "Designer UX/UI", appliedAt: "5 hours ago", status: "reviewed", resumeUrl: "https://cdn.gohorsejobs.com/docs/carlos_santos_portfolio.pdf", message: "Designer UX/UI com 3 anos de experiência...", }, { id: "3", candidateName: "Maria Oliveira", email: "maria.oliveira@email.com", phone: "+55 21 97777-3333", jobTitle: "Product Manager", appliedAt: "1 day ago", status: "shortlisted", resumeUrl: "https://cdn.gohorsejobs.com/docs/maria_oliveira_resume.pdf", message: "Product Manager com 4 anos de experiência...", }, { id: "4", candidateName: "Pedro Costa", email: "pedro.costa@email.com", phone: "+55 11 96666-4444", jobTitle: "Backend Developer", appliedAt: "2 days ago", status: "hired", resumeUrl: "https://cdn.gohorsejobs.com/docs/pedro_costa_cv.pdf", message: "Desenvolvedor Backend com experiência em Go...", }, { id: "5", candidateName: "Juliana Ferreira", email: "juliana.ferreira@email.com", phone: "+55 11 95555-5555", jobTitle: "Data Scientist", appliedAt: "3 days ago", status: "rejected", resumeUrl: "https://cdn.gohorsejobs.com/docs/juliana_ferreira_cv.pdf", message: "Data Scientist com mestrado em Machine Learning...", }, ] const statusConfig = { pending: { label: "Pending", color: "bg-yellow-100 text-yellow-800 border-yellow-200", icon: Clock }, reviewed: { label: "Reviewed", color: "bg-blue-100 text-blue-800 border-blue-200", icon: Eye }, shortlisted: { label: "Shortlisted", color: "bg-purple-100 text-purple-800 border-purple-200", icon: Star }, hired: { label: "Hired", color: "bg-green-100 text-green-800 border-green-200", icon: Check }, rejected: { label: "Rejected", color: "bg-red-100 text-red-800 border-red-200", icon: X }, } export default function ApplicationsPage() { const [applications, setApplications] = useState(mockApplications) const [statusFilter, setStatusFilter] = useState("all") const [searchTerm, setSearchTerm] = useState("") const [selectedApp, setSelectedApp] = useState(null) const filteredApplications = applications.filter((app) => { const matchesStatus = statusFilter === "all" || app.status === statusFilter const matchesSearch = app.candidateName.toLowerCase().includes(searchTerm.toLowerCase()) || app.jobTitle.toLowerCase().includes(searchTerm.toLowerCase()) || app.email.toLowerCase().includes(searchTerm.toLowerCase()) return matchesStatus && matchesSearch }) const stats = { total: applications.length, pending: applications.filter((a) => a.status === "pending").length, shortlisted: applications.filter((a) => a.status === "shortlisted").length, hired: applications.filter((a) => a.status === "hired").length, } return (
{/* Header */}

Applications

Manage applications for your job postings

{/* Stats */}
{stats.total}

Total Applications

{stats.pending}

Pending Review

{stats.shortlisted}

Shortlisted

{stats.hired}

Hired

{/* Filters */}
setSearchTerm(e.target.value)} />
{/* Applications List */}
{filteredApplications.length === 0 ? ( No applications found matching your filters. ) : ( filteredApplications.map((app) => { const StatusIcon = statusConfig[app.status as keyof typeof statusConfig].icon return ( setSelectedApp(app)} >
{/* Avatar and Info */}
{app.candidateName .split(" ") .map((n) => n[0]) .join("") .toUpperCase() .slice(0, 2)}

{app.candidateName}

{statusConfig[app.status as keyof typeof statusConfig].label}

Applied for: {app.jobTitle}

{app.email} {app.phone} {app.appliedAt}
{/* Actions */}
) }) )}
{/* Selected Application Modal/Drawer would go here */} {selectedApp && (
setSelectedApp(null)}> e.stopPropagation()}>
Application Details
{selectedApp.candidateName .split(" ") .map((n) => n[0]) .join("") .toUpperCase() .slice(0, 2)}

{selectedApp.candidateName}

{selectedApp.jobTitle}

{statusConfig[selectedApp.status as keyof typeof statusConfig].label}

Cover Message

{selectedApp.message}

)}
) }