import { z } from "zod";

export const Color = z.object({
  value: z.array(z.number().min(0).max(255)).max(4),
});

const PaintStyleTypeOptions = ["Fill", "Stroke"] as const;

export const PaintStyleType = z.enum(PaintStyleTypeOptions);

const ColorWithDefault = Color.optional().default({ value: [0, 0, 0, 1] });

export const StrokeStyle = z.object({
  width: z.number().min(0).optional().default(10),
  color: ColorWithDefault,
  type: z.literal(PaintStyleType.Enum.Stroke),
});

export const FillStyle = z.object({
  color: ColorWithDefault,
  type: z.literal(PaintStyleType.Enum.Fill),
});

export const TextAlign = z.enum(["Left", "Center", "Right"]);

export const PaintStyle = z.discriminatedUnion("type", [
  StrokeStyle,
  FillStyle,
]);

export const Paint = z.object({
  style: PaintStyle,
});

export const TextPaint = z.object({
  style: PaintStyle,
  align: TextAlign,
  font_name: z.string(),
  size: z.number().min(0),
});

/* const NestedFillStyle = FillStyle.omit({ type: true }).default({});
const NestedStrokeStyle = StrokeStyle.omit({ type: true }).default({});

export const StrokeAndFillStyle = z.object({
  color: ColorWithDefault,
  type: z.literal(PaintStyleType.Enum.StrokeAndFill),
  fill: NestedFillStyle,
  stroke: NestedStrokeStyle,
}); */
