import { z } from "zod"

import { dt } from "@/lib/dt"

import { nullableStringValidator } from "@/utils/zod/stringValidator"

import { AlertTypeEnum } from "@/types/enums/alert"

const specialAlertSchema = z.object({
  description: nullableStringValidator,
  displayInBookingFlow: z.boolean().default(false),
  endDate: nullableStringValidator,
  startDate: nullableStringValidator,
  title: nullableStringValidator,
  type: nullableStringValidator,
})

export const specialAlertsSchema = z
  .array(specialAlertSchema)
  .nullish()
  .transform((arr) => (arr ? arr.filter(Boolean) : []))
  .transform((data) => {
    const now = dt().utc().format("YYYY-MM-DD")
    const filteredAlerts = data.filter((alert) => {
      const shouldShowNow =
        alert.startDate && alert.endDate
          ? alert.startDate <= now && alert.endDate >= now
          : true
      const hasText = alert.description || alert.title
      return shouldShowNow && hasText
    })
    return filteredAlerts.map((alert, idx) => ({
      heading: alert.title || null,
      id: `alert-${alert.type}-${idx}`,
      name: alert.type,
      text: alert.description || null,
      type: AlertTypeEnum.Info,
      displayInBookingFlow: alert.displayInBookingFlow,
    }))
  })
