import * as z from "zod";

export const PcbLayerNameSchema = () => z.enum([
    "TOP",
    "TOP_SILKSCREEN",
    "TOP_SOLDER_MASK",
    "TOP_PASTE_MASK",
    "TOP_ASSEMBLY",
    "TOP_STIFFENER",
    "BOTTOM",
    "BOTTOM_SILKSCREEN",
    "BOTTOM_SOLDER_MASK",
    "BOTTOM_PASTE_MASK",
    "BOTTOM_ASSEMBLY",
    "BOTTOM_STIFFENER",
    "BOARD_OUTLINE",
    "MULTI",
    "DOCUMENT",
    "MECHANICAL",
    "RATLINE",
    "INNER_1",
    "INNER_2",
    "INNER_3",
    "INNER_4",
    "INNER_5",
    "INNER_6",
    "INNER_7",
    "INNER_8",
    "INNER_9",
    "INNER_10",
    "INNER_11",
    "INNER_12",
    "INNER_13",
    "INNER_14",
    "INNER_15",
    "INNER_16",
    "INNER_17",
    "INNER_18",
    "INNER_19",
    "INNER_20",
    "INNER_21",
    "INNER_22",
    "INNER_23",
    "INNER_24",
    "INNER_25",
    "INNER_26",
    "INNER_27",
    "INNER_28",
    "INNER_29",
    "INNER_30",
    "CUSTOM_1",
    "CUSTOM_2",
    "CUSTOM_3",
    "CUSTOM_4",
    "CUSTOM_5",
    "CUSTOM_6",
    "CUSTOM_7",
    "CUSTOM_8",
    "CUSTOM_9",
    "CUSTOM_10",
    "CUSTOM_11",
    "CUSTOM_12",
    "CUSTOM_13",
    "CUSTOM_14",
    "CUSTOM_15",
    "CUSTOM_16",
    "CUSTOM_17",
    "CUSTOM_18",
    "CUSTOM_19",
    "CUSTOM_20",
    "CUSTOM_21",
    "CUSTOM_22",
    "CUSTOM_23",
    "CUSTOM_24",
    "CUSTOM_25",
    "CUSTOM_26",
    "CUSTOM_27",
    "CUSTOM_28",
    "CUSTOM_29",
    "CUSTOM_30",
    "SUBSTRATE_1",
    "HOLE",
    "COMPONENT_SHAPE",
    "COMPONENT_MARKING",
    "PIN_SOLDERING",
    "PIN_FLOATING",
    "COMPONENT_MODEL",
    "SHELL_3D_OUTLINE",
    "SHELL_3D_TOP",
    "SHELL_3D_BOTTOM",
    "DRILL_DRAWING"
]);

export const PcbPointSchema = () => z.object({
    x: z.number(),
    y: z.number(),
}).strict();

export type PcbLayerName = z.infer<ReturnType<typeof PcbLayerNameSchema>>;
export type PcbPoint = z.infer<ReturnType<typeof PcbPointSchema>>;