import { z } from "zod"
import { DISCOUNT_TYPES } from "../enums.js"

export const CreatePromoCodeSchema = z.object({
    code: z.string().trim().min(1).max(50).toUpperCase(),
    label: z.string().trim().max(100).optional(),
    discountType: z.enum(DISCOUNT_TYPES),
    /** Centimes pour FIXED_AMOUNT, centièmes pour PERCENTAGE (ex: 1000 = 10%), 0 pour FREE_PRODUCT */
    discountValue: z.number().int().min(0),
    targetProductId: z.string().uuid().optional(),
    targetCategoryId: z.string().uuid().optional(),
    maxUses: z.number().int().positive().optional(),
    maxUsesPerOrder: z.number().int().positive().default(1),
    startsAt: z.string().datetime().optional(),
    expiresAt: z.string().datetime().optional(),
})

export const UpdatePromoCodeSchema = z.object({
    label: z.string().trim().max(100).optional(),
    discountValue: z.number().int().min(0).optional(),
    maxUses: z.number().int().positive().nullable().optional(),
    maxUsesPerOrder: z.number().int().positive().optional(),
    startsAt: z.string().datetime().nullable().optional(),
    expiresAt: z.string().datetime().nullable().optional(),
    active: z.boolean().optional(),
})

export const ApplyPromoCodeSchema = z.object({
    code: z.string().trim().min(1).max(50),
})

export type CreatePromoCodeInput = z.infer<typeof CreatePromoCodeSchema>
export type UpdatePromoCodeInput = z.infer<typeof UpdatePromoCodeSchema>
export type ApplyPromoCodeInput = z.infer<typeof ApplyPromoCodeSchema>

