import { z } from 'zod'

const queryBooleanSchema = z.preprocess((value) => {
  if (value === 'true') return true
  if (value === 'false') return false
  return value
}, z.boolean())

export const billingListQuerySchema = z.object({
  page: z.coerce.number().int().positive().default(1),
  pageSize: z.coerce.number().int().positive().max(100).default(25),
  search: z.string().trim().max(120).optional().default(''),
  paymentStatus: z.enum(['ALL', 'UNPAID', 'PARTIAL', 'PAID']).optional().default('ALL'),
  outstandingOnly: queryBooleanSchema.optional().default(false),
})

export const billingSummaryQuerySchema = z.object({
  search: z.string().trim().max(120).optional().default(''),
})

export const invoiceParamSchema = z.object({
  invoiceId: z.string().min(1),
})

export const manualBillingPaymentSchema = z.object({
  amountMinor: z.number().int().positive(),
  currency: z.literal('MAD').default('MAD'),
  type: z.enum(['CHARGE', 'DEPOSIT']),
  method: z.enum(['CASH', 'CHECK', 'BANK_TRANSFER', 'CARD', 'PAYPAL', 'OTHER']),
  receivedAt: z.string().datetime().optional(),
  reference: z.string().trim().max(120).optional(),
  note: z.string().trim().max(1000).optional(),
  idempotencyKey: z.string().uuid(),
})
