/**
 * Quotation Settings Validator
 * Zod schemas for quotation settings CRUD operations
 */

import { z } from 'zod';

export const updateQuotationSettingsSchema = z.object({
  defaultCurrency: z.string().length(3).optional(),
  defaultTaxRate: z.number().min(0).max(100).optional(),
  defaultPaymentTerms: z.number().int().min(1).max(365).optional(),
  defaultValidDays: z.number().int().min(1).max(365).optional(),
  penaltyEnabled: z.boolean().optional(),
  penaltyType: z.enum(['PERCENTAGE', 'FLAT']).optional(),
  penaltyRate: z.number().min(0).max(100).optional(),
  penaltyGraceDays: z.number().int().min(0).max(365).optional(),
  penaltyCompound: z.boolean().optional(),
  penaltyMaxAmount: z.number().min(0).nullable().optional(),
  penaltyFrequencyDays: z.number().int().min(1).max(365).optional(),
  reminderEnabled: z.boolean().optional(),
  reminderChannel: z.enum(['email', 'whatsapp', 'both']).optional(),
  reminderSchedule: z.array(z.object({
    trigger: z.enum(['before_due', 'on_due', 'after_due']),
    dayOffset: z.number().int(),
  })).optional(),
  defaultSendImmediately: z.boolean().optional(),
  companyName: z.string().max(200).nullable().optional(),
  companyLogo: z.string().url().nullable().optional(),
  footerText: z.string().max(1000).nullable().optional(),
});

export type UpdateQuotationSettingsInput = z.infer<typeof updateQuotationSettingsSchema>;
