import { z } from "zod";

export const CreateFixedCostSchema = z.object({
  scope: z.enum(["household", "private", "child"]).default("household"),
  childId: z.string().min(1).optional(),
  categoryId: z.string().min(1).optional(),
  label: z.string().min(1).max(255),
  amount: z.number().positive(),
  type: z.enum(["income", "expense"]).default("expense"),
});

export const UpdateFixedCostSchema = z.object({
  label: z.string().min(1).max(255).optional(),
  amount: z.number().positive().optional(),
  categoryId: z.string().min(1).nullable().optional(),
  isActive: z.boolean().optional(),
});

export const CreateTransferLineItemSchema = z.object({
  label: z.string().min(1).max(255),
  amount: z.number().positive(),
});

export const UpdateTransferLineItemSchema = z.object({
  label: z.string().min(1).max(255).optional(),
  amount: z.number().positive().optional(),
  isActive: z.boolean().optional(),
});

export const CreateMonthlyTransferSchema = z.object({
  month: z.string().regex(/^\d{4}-\d{2}$/),
  toUserId: z.string().min(1),
  amount: z.number().positive(),
  note: z.string().max(255).optional(),
});

export type CreateFixedCostInput = z.infer<typeof CreateFixedCostSchema>;
export type UpdateFixedCostInput = z.infer<typeof UpdateFixedCostSchema>;
export type CreateTransferLineItemInput = z.infer<typeof CreateTransferLineItemSchema>;
export type UpdateTransferLineItemInput = z.infer<typeof UpdateTransferLineItemSchema>;
export type CreateMonthlyTransferInput = z.infer<typeof CreateMonthlyTransferSchema>;
