'use server' import { env } from '~/env' import { getGoogleCalendarClient, getGoogleCalendarId } from '~/server/googleCalendar' function googleCalendarDate(date: Date) { return date.toISOString().replace(/[-:]|\.\d{3}/g, '') } function createGoogleCalendarTemplateLink({ title, description, startTime, endTime, gregorEmail, }: { title: string description: string startTime: Date endTime: Date gregorEmail: string }) { const params = new URLSearchParams({ action: 'TEMPLATE', text: title, dates: `${googleCalendarDate(startTime)}/${googleCalendarDate(endTime)}`, details: description, add: gregorEmail, }) return `https://calendar.google.com/calendar/render?${params.toString()}` } export async function scheduleMeeting({ title, description, dateTime, durationMinutes, attendeeEmail, attendeeName, }: { title: string description: string dateTime: string durationMinutes: number attendeeEmail?: string attendeeName?: string }) { try { const calendar = getGoogleCalendarClient() const startTime = new Date(dateTime) const endTime = new Date(startTime.getTime() + durationMinutes * 60 * 1000) const attendeeNote = attendeeEmail ? `\n\nVisitor: ${attendeeName ?? 'Unknown'} <${attendeeEmail}>` : '' const eventDescription = `${description}${attendeeNote}` const eventRequest = { summary: title, description: eventDescription, start: { dateTime: startTime.toISOString(), timeZone: 'UTC' }, end: { dateTime: endTime.toISOString(), timeZone: 'UTC' }, } const event = await calendar.events.insert({ calendarId: getGoogleCalendarId(), requestBody: eventRequest, }) const addToCalendarLink = createGoogleCalendarTemplateLink({ title, description, startTime, endTime, gregorEmail: env.GREGOR_MEETING_EMAIL, }) return { success: true, eventId: event.data.id, addToCalendarLink, message: `Meeting "${title}" scheduled for ${startTime.toLocaleString()}.${attendeeEmail ? ` Visitor email noted: ${attendeeEmail}.` : ''} The add-to-calendar link invites ${env.GREGOR_MEETING_EMAIL}.`, } } catch (error) { console.error('Failed to schedule meeting:', error) return { success: false, error: 'Failed to schedule meeting. Please try again.' } } }