import { z } from 'zod';
import { baseListQuerySchema } from '@/lib/api/route-helpers';
import { EXPENSE_CATEGORIES, PAYMENT_METHODS } from '@/lib/constants';

export const createExpenseSchema = z.object({
  establishmentName: z.string().max(200).optional(),
  amount: z.coerce.number().positive(),
  currency: z.string().length(3).default('USD'),
  paymentMethod: z.enum(PAYMENT_METHODS).optional(),
  category: z.enum(EXPENSE_CATEGORIES).optional(),
  payer: z.string().max(200).optional(),
  expenseDate: z.coerce.date(),
  description: z.string().max(2000).optional(),
  receiptFileIds: z.array(z.string()).optional(),
  paymentStatus: z.enum(['unpaid', 'paid', 'partial']).default('unpaid'),
  paymentDate: z.string().optional(),
  paymentReference: z.string().optional(),
  paymentNotes: z.string().optional(),
});

export const updateExpenseSchema = createExpenseSchema.partial();

export const listExpensesSchema = baseListQuerySchema.extend({
  category: z.string().optional(),
  paymentStatus: z.string().optional(),
  dateFrom: z.string().optional(),
  dateTo: z.string().optional(),
  currency: z.string().optional(),
  payer: z.string().optional(),
});

export type CreateExpenseInput = z.infer<typeof createExpenseSchema>;
export type UpdateExpenseInput = z.infer<typeof updateExpenseSchema>;
export type ListExpensesInput = z.infer<typeof listExpensesSchema>;
