"use client" import { useState } from "react" import { mockInterviews, mockCandidates, mockRequisitions, mockUsers } from "@/lib/mock-data" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" import { Button } from "@/components/ui/button" import { Badge } from "@/components/ui/badge" import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger } from "@/components/ui/dialog" import { Label } from "@/components/ui/label" import { Input } from "@/components/ui/input" import { Textarea } from "@/components/ui/textarea" import { Calendar } from "@/components/ui/calendar" import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" import { ChevronLeft, ChevronRight, Plus, Video, MapPin, Clock, User, Calendar as CalendarIcon, Users, MoreVertical, Mail, Phone, FileText, CheckCircle2, XCircle, Edit, Trash2, ExternalLink } from "lucide-react" import { cn } from "@/lib/utils" const weekDays = ["Dom", "Lun", "Mar", "Mie", "Jue", "Vie", "Sab"] const monthNames = ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"] export function CalendarPage() { const [currentDate, setCurrentDate] = useState(new Date()) const [selectedDate, setSelectedDate] = useState(null) const [viewMode, setViewMode] = useState<"month" | "week" | "day">("month") const [isNewInterviewOpen, setIsNewInterviewOpen] = useState(false) const [selectedInterview, setSelectedInterview] = useState(null) const [filterType, setFilterType] = useState("all") const interviews = mockInterviews const getDaysInMonth = (date: Date) => { const year = date.getFullYear() const month = date.getMonth() const firstDay = new Date(year, month, 1) const lastDay = new Date(year, month + 1, 0) const daysInMonth = lastDay.getDate() const startingDay = firstDay.getDay() const days: (Date | null)[] = [] for (let i = 0; i < startingDay; i++) { days.push(null) } for (let i = 1; i <= daysInMonth; i++) { days.push(new Date(year, month, i)) } return days } const getInterviewsForDate = (date: Date) => { return interviews.filter(interview => { const interviewDate = new Date(interview.scheduledDate) return ( interviewDate.getDate() === date.getDate() && interviewDate.getMonth() === date.getMonth() && interviewDate.getFullYear() === date.getFullYear() ) }).filter(interview => { if (filterType === "all") return true return interview.type === filterType }) } const navigateMonth = (direction: "prev" | "next") => { setCurrentDate(prev => { const newDate = new Date(prev) if (direction === "prev") { newDate.setMonth(newDate.getMonth() - 1) } else { newDate.setMonth(newDate.getMonth() + 1) } return newDate }) } const getInterviewTypeColor = (type: string) => { const colors: Record = { rrhh: "bg-primary text-primary-foreground", technical: "bg-blue-500 text-white", manager: "bg-purple-500 text-white", final: "bg-accent text-accent-foreground" } return colors[type] || "bg-secondary text-secondary-foreground" } const getInterviewTypeLabel = (type: string) => { const labels: Record = { rrhh: "RR.HH.", technical: "Técnica", manager: "Gerente", final: "Final" } return labels[type] || type } const getCandidateName = (candidateId: string) => { const candidate = mockCandidates.find(c => c.id === candidateId) return candidate?.name || "Candidato" } const getRequisitionTitle = (requisitionId: string) => { const requisition = mockRequisitions.find(r => r.id === requisitionId) return requisition?.position || "Vacante" } const formatTime = (dateString: string) => { const date = new Date(dateString) return date.toLocaleTimeString("es-MX", { hour: "2-digit", minute: "2-digit" }) } const days = getDaysInMonth(currentDate) const upcomingInterviews = interviews .filter(i => new Date(i.scheduledDate) >= new Date()) .sort((a, b) => new Date(a.scheduledDate).getTime() - new Date(b.scheduledDate).getTime()) .slice(0, 5) const todayInterviews = getInterviewsForDate(new Date()) return (
{/* Header */}

Calendario de Entrevistas

Gestiona y agenda entrevistas con candidatos

Agendar Nueva Entrevista Programa una entrevista con un candidato