import { useState, useMemo } from 'react' import { startOfMonth, endOfMonth, startOfWeek, endOfWeek, eachDayOfInterval, format, isSameMonth, isToday, addMonths, subMonths, isBefore, isAfter, isSameDay } from 'date-fns' import { ChevronLeft, ChevronRight } from 'lucide-react' import { getBrandColor } from '../utils/api' const CAMPAIGN_COLORS = [ 'bg-indigo-400', 'bg-pink-400', 'bg-emerald-400', 'bg-amber-400', 'bg-purple-400', 'bg-cyan-400', 'bg-rose-400', 'bg-teal-400', ] export default function CampaignCalendar({ campaigns = [] }) { const [currentMonth, setCurrentMonth] = useState(new Date()) const days = useMemo(() => { const monthStart = startOfMonth(currentMonth) const monthEnd = endOfMonth(currentMonth) const calStart = startOfWeek(monthStart, { weekStartsOn: 0 }) const calEnd = endOfWeek(monthEnd, { weekStartsOn: 0 }) return eachDayOfInterval({ start: calStart, end: calEnd }) }, [currentMonth]) const getCampaignsForDay = (day) => { return campaigns.filter((c) => { const start = new Date(c.startDate) const end = new Date(c.endDate) return (isSameDay(day, start) || isAfter(day, start)) && (isSameDay(day, end) || isBefore(day, end)) }) } const isStartOfCampaign = (day, campaign) => { return isSameDay(day, new Date(campaign.startDate)) } const isEndOfCampaign = (day, campaign) => { return isSameDay(day, new Date(campaign.endDate)) } return (