import { z } from "zod"; export const createCircuitSchema = z.object({ sectionId: z.string().min(1), equipmentIdentifier: z.string().min(1), displayName: z.string().optional(), sortOrder: z.number(), protectionType: z.string().optional(), protectionRatedCurrent: z.number().min(0).optional(), protectionCharacteristic: z.string().optional(), cableType: z.string().optional(), cableCrossSection: z.string().optional(), cableLength: z.number().min(0).optional(), rcdAssignment: z.string().optional(), terminalDesignation: z.string().optional(), voltage: z.number().positive().optional(), controlRequirement: z.string().optional(), status: z.string().optional(), isReserve: z.boolean().optional(), remark: z.string().optional(), }); export const createCircuitDeviceRowSchema = z.object({ linkedProjectDeviceId: z.string().min(1).optional(), name: z.string().min(1), displayName: z.string().min(1), phaseType: z.string().optional(), connectionKind: z.string().optional(), costGroup: z.string().optional(), category: z.string().optional(), level: z.string().optional(), roomId: z.string().min(1).optional(), roomNumberSnapshot: z.string().optional(), roomNameSnapshot: z.string().optional(), quantity: z.number().min(0), powerPerUnit: z.number().min(0), simultaneityFactor: z.number().min(0), cosPhi: z.number().positive().optional(), remark: z.string().optional(), overriddenFields: z.string().optional(), sortOrder: z.number().optional(), }); export const createCircuitWithDeviceRowsSchema = z.object({ circuit: createCircuitSchema, deviceRows: z.array(createCircuitDeviceRowSchema).min(1), }); export const moveCircuitDeviceRowSchema = z .object({ targetCircuitId: z.string().min(1).optional(), targetSectionId: z.string().min(1).optional(), createNewCircuit: z.boolean().optional(), }) .refine( (value) => Boolean(value.targetCircuitId) || (Boolean(value.targetSectionId) && value.createNewCircuit === true), { message: "Either targetCircuitId or targetSectionId+createNewCircuit=true is required." } ); export const moveCircuitDeviceRowsBulkSchema = z .object({ rowIds: z.array(z.string().min(1)).min(1), targetCircuitId: z.string().min(1).optional(), targetSectionId: z.string().min(1).optional(), createNewCircuit: z.boolean().optional(), }) .refine( (value) => Boolean(value.targetCircuitId) || (Boolean(value.targetSectionId) && value.createNewCircuit === true), { message: "Either targetCircuitId or targetSectionId+createNewCircuit=true is required." } ); export const reorderSectionCircuitsSchema = z.object({ orderedCircuitIds: z.array(z.string().min(1)).min(1), }); export const updateSectionEquipmentIdentifiersSchema = z.object({ identifiers: z .array( z.object({ circuitId: z.string().min(1), equipmentIdentifier: z.string().min(1), }) ) .min(1), }); export type CreateCircuitInput = z.infer; export type CreateCircuitDeviceRowInput = z.infer; export type CreateCircuitWithDeviceRowsInput = z.infer; export type MoveCircuitDeviceRowInput = z.infer; export type MoveCircuitDeviceRowsBulkInput = z.infer; export type ReorderSectionCircuitsInput = z.infer; export type UpdateSectionEquipmentIdentifiersInput = z.infer;