import { z } from "zod";
// ─── Query / param schemas ────────────────────────────────────────────────────
export const ListQuerySchema = z.object({
    domain: z.string().min(1),
    page: z.coerce.number().int().positive().default(1),
    limit: z.coerce.number().int().min(1).max(200).default(50),
    q: z.string().optional(),
    parentId: z.string().uuid("parentId must be a valid UUID").optional(),
    isActive: z
        .string()
        .optional()
        .transform((v) => {
        if (v === undefined)
            return undefined;
        return v === "true" ? true : v === "false" ? false : undefined;
    }),
});
export const DomainParamSchema = z.object({
    domain: z.string().min(1),
});
export const IdParamSchema = z.object({
    domain: z.string().min(1),
    id: z.string().uuid("id must be a valid UUID"),
});
// ─── Body schemas ─────────────────────────────────────────────────────────────
export const CreateBodySchema = z.object({
    name: z.string().min(1),
    code: z.string().optional(),
    description: z.string().optional(),
    sortOrder: z.number().int().optional(),
    isActive: z.boolean().optional(),
    metadata: z.record(z.string(), z.unknown()).optional(),
    effectiveFrom: z.string().datetime({ offset: true }).optional(),
    effectiveTo: z.string().datetime({ offset: true }).optional(),
    // Hierarchical domains
    parentId: z.string().uuid("parentId must be a valid UUID").optional(),
    // Domain-specific
    ownerId: z.string().uuid().optional(),
    groupId: z.string().uuid().optional(),
    path: z.string().optional(),
    depth: z.number().int().min(0).optional(),
    areaType: z.string().optional(),
});
export const UpdateBodySchema = CreateBodySchema.partial();
