import { z } from "zod";

export const expensesSchema = z.object({
  id: z.number(),
  recurringExpenseId: z.number(),
  clientId: z.number(),
  assetId: z.number().nullable(),
  amount: z.number().nonnegative().gt(0),
  balance: z.number().nonnegative().gt(0),
  type: z.number().gt(0),
  expenseNature: z.number(),
  paidDate: z.string().datetime(), // For timestamp
  paidByUserType: z.number(),
  paidBy: z.number(),
  paidToUserType: z.number(),
  paidTo: z.number(),
  description: z.string().optional(), // Text is mapped to string
  expenseTitle: z.string().nullable().optional(),
  paymentMethod: z.number(),
  repetitionType: z.number(),
  noOfMonths: z.number(),
  dueDate: z.string().date(),
  isPaid: z.number(),
  supportDoc: z.string(),
  bankRefNum: z.string().nullable(),
  paymentAccountNo: z.string().nullable(),
  paymentAccountName: z.string().nullable(),
  tallyJournalStatus: z.number(),
  tallyPaymentStatus: z.number(),
  tallyBillRef: z.string().nullable(),
  createdAt: z.string().datetime(),
  updatedAt: z.string().datetime(),
});

type expensesTypes = z.infer<typeof expensesSchema>;

export const AddExpenseSchema = z.object({
  amount: expensesSchema.shape.amount,
  type: expensesSchema.shape.type,
  paidDate: expensesSchema.shape.paidDate,
  propertyId: z.number().gt(0),
  paidBy: expensesSchema.shape.paidBy,
  paidByUserType: expensesSchema.shape.paidByUserType,
  paidTo: expensesSchema.shape.paidTo,
  paidToUserType: expensesSchema.shape.paidToUserType,
  description: expensesSchema.shape.description,
  paymentMode: expensesSchema.shape.paymentMethod,
});

export const EditExpenseSchema = z.object({
  expenseId: expensesSchema.shape.id,
  amount: expensesSchema.shape.amount,
  type: expensesSchema.shape.type,
  paidDate: expensesSchema.shape.paidDate,
  propertyId: z.number().gt(0),
  paidBy: expensesSchema.shape.paidBy,
  paidByUserType: expensesSchema.shape.paidByUserType,
  paidTo: expensesSchema.shape.paidTo,
  description: expensesSchema.shape.description,
  paymentMode: expensesSchema.shape.paymentMethod,
});

export const TogglePropertySchema = z.object({
  toggleValue: z.number(),
  propId: z.number(),
  expenseId: z.number(),
});

export const DeleteExpenseSchema = z.object({
  // propId: z.number(),
  expenseId: z.number(),
});

export default expensesTypes;
