import { z } from 'zod';

export const placementEnum = z.enum([
  'gallery',
  'campaigns_list',
  'campaign_detail',
  'shifts',
  'shop',
  'donate',
  'pricing',
  'landing_page',
  'docs',
]);

export const createAdSchema = z.object({
  type: z.enum(['system', 'payment_subscribe', 'payment_donate', 'payment_shop', 'custom']),
  variant: z.enum(['standard', 'highlight', 'minimal']).optional().default('standard'),
  title: z.string().min(1).max(200),
  subtitle: z.string().max(500).optional().nullable(),
  imagePath: z.string().max(500).optional().nullable(),
  linkUrl: z.string().max(500).optional().nullable(),
  ctaText: z.string().max(100).optional().nullable(),
  ctaStyle: z.enum(['primary', 'outline', 'link']).optional().default('primary'),
  bgColor: z.string().max(20).optional().nullable(),
  iconEmoji: z.string().max(10).optional().nullable(),
  visibility: z.enum(['everyone', 'anonymous', 'authenticated', 'non_subscriber']).optional().default('everyone'),
  isActive: z.boolean().optional().default(false),
  position: z.number().int().min(0).optional().default(0),
  frequency: z.number().int().min(1).max(24).optional().default(6),
  startDate: z.string().datetime().optional().nullable(),
  endDate: z.string().datetime().optional().nullable(),
  placements: z.array(placementEnum).optional().default([]),
});

export const updateAdSchema = createAdSchema.partial();

export const listAdsSchema = z.object({
  page: z.coerce.number().int().min(1).optional().default(1),
  limit: z.coerce.number().int().min(1).max(100).optional().default(50),
  type: z.enum(['system', 'payment_subscribe', 'payment_donate', 'payment_shop', 'custom']).optional(),
  isActive: z.enum(['true', 'false']).optional(),
});

export const publicAdsQuerySchema = z.object({
  placement: placementEnum.optional(),
});

export const reorderAdsSchema = z.object({
  ids: z.array(z.number().int()).min(1),
});

export const trackAdSchema = z.object({
  adId: z.number().int(),
  event: z.enum(['impression', 'click']),
  sessionId: z.string().uuid().optional(),
});

export const adAnalyticsQuerySchema = z.object({
  days: z.coerce.number().int().min(1).max(365).optional().default(30),
});

export type CreateAdInput = z.infer<typeof createAdSchema>;
export type UpdateAdInput = z.infer<typeof updateAdSchema>;
export type ListAdsInput = z.infer<typeof listAdsSchema>;
export type TrackAdInput = z.infer<typeof trackAdSchema>;
