/**
 * Zod validation schemas for calendar routes — calendar-module.
 */
import { z } from 'zod'

export const createCalendarEventSchema = z
  .object({
    title: z.string().min(1),
    description: z.string().optional(),
    startAt: z.string().datetime(),
    endAt: z.string().datetime(),
    allDay: z.boolean().default(false),
    location: z.string().optional(),
    customerId: z.string().uuid().optional(),
    projectId: z.string().uuid().optional(),
    participantEmails: z.array(z.string().email()).optional(),
  })
  .refine((v) => v.endAt >= v.startAt, { message: 'endAt must be >= startAt' })

export const updateCalendarEventSchema = z
  .object({
    title: z.string().min(1).optional(),
    description: z.string().optional(),
    startAt: z.string().datetime().optional(),
    endAt: z.string().datetime().optional(),
    allDay: z.boolean().optional(),
    location: z.string().optional(),
    customerId: z.string().uuid().optional().nullable(),
    projectId: z.string().uuid().optional().nullable(),
    syncStatus: z.enum(['local', 'synced', 'pending', 'error']).optional(),
  })
  .refine(
    (v) => {
      if (v.startAt && v.endAt) return v.endAt >= v.startAt
      return true
    },
    { message: 'endAt must be >= startAt' },
  )

export const rangeQuerySchema = z.object({
  start: z.string().datetime({ message: 'start must be an ISO datetime string' }),
  end: z.string().datetime({ message: 'end must be an ISO datetime string' }),
})

export const schedulingProviderSchema = z.enum(['calendly', 'acuity', 'mocal'])

export const createSchedulingConnectionSchema = z.object({
  apiKey: z.string().min(1, 'API key is required'),
  settings: z
    .object({
      action: z.enum(['event', 'event_task', 'event_ticket']).default('event'),
    })
    .passthrough()
    .optional(),
})

export type CreateCalendarEventInput = z.infer<typeof createCalendarEventSchema>
export type UpdateCalendarEventInput = z.infer<typeof updateCalendarEventSchema>
export type RangeQuery = z.infer<typeof rangeQuerySchema>
