import { z } from "zod"

export const ProductConfigurationPathNodeSchema = z.object({
    groupId: z.string().uuid().nullable().optional().default(null),
    groupCode: z.string().trim().min(1).max(191),
    groupLabel: z.string().trim().min(1).max(191),
    choiceId: z.string().uuid().nullable().optional().default(null),
    choiceCode: z.string().trim().min(1).max(191),
    choiceLabel: z.string().trim().min(1).max(191),
    priceDelta: z.number().int().optional().default(0),
})

export const ProductConfigurationEntrySchema = z.object({
    index: z.number().int().positive(),
    label: z.string().trim().min(1).max(191).nullable().optional().default(null),
    path: z.array(ProductConfigurationPathNodeSchema).min(1),
    unitPriceDelta: z.number().int().optional().default(0),
})

export const ProductConfigurationStepSnapshotSchema = z.object({
    stepId: z.string().uuid().nullable().optional().default(null),
    stepCode: z.string().trim().min(1).max(191),
    stepLabel: z.string().trim().min(1).max(191),
    repeatCount: z.number().int().positive().nullable().optional().default(null),
    entries: z.array(ProductConfigurationEntrySchema).default([]),
})

export const ProductConfigurationSnapshotSchema = z.object({
    configuratorId: z.string().uuid(),
    configuratorName: z.string().trim().min(1).max(191),
    version: z.number().int().positive().nullable().optional().default(null),
    totalUnitPriceDelta: z.number().int().optional().default(0),
    steps: z.array(ProductConfigurationStepSnapshotSchema).min(1),
})

export type ProductConfigurationPathNodeInput = z.infer<typeof ProductConfigurationPathNodeSchema>
export type ProductConfigurationEntryInput = z.infer<typeof ProductConfigurationEntrySchema>
export type ProductConfigurationStepSnapshotInput = z.infer<typeof ProductConfigurationStepSnapshotSchema>
export type ProductConfigurationSnapshotInput = z.infer<typeof ProductConfigurationSnapshotSchema>

