import { z } from 'zod'; export const MembershipStatusEnum = z.enum([ 'active', 'inactive', 'pending', 'resigned', 'excluded', 'deceased', ]); export type MembershipStatus = z.infer; export const SepaMandateStatusEnum = z.enum([ 'active', 'pending', 'revoked', 'expired', ]); export const CreateMemberSchema = z.object({ accountId: z.string().uuid(), memberNumber: z.string().optional(), firstName: z.string().min(1).max(128), lastName: z.string().min(1).max(128), dateOfBirth: z.string().optional(), gender: z.enum(['male', 'female', 'diverse']).optional(), title: z.string().max(32).optional(), email: z.string().email().optional().or(z.literal('')), phone: z.string().max(32).optional(), mobile: z.string().max(32).optional(), street: z.string().max(256).optional(), houseNumber: z.string().max(16).optional(), postalCode: z.string().max(10).optional(), city: z.string().max(128).optional(), country: z.string().max(2).default('DE'), status: MembershipStatusEnum.default('active'), entryDate: z.string().default(() => new Date().toISOString().split('T')[0]!), duesCategoryId: z.string().uuid().optional(), iban: z.string().max(34).optional(), bic: z.string().max(11).optional(), accountHolder: z.string().max(128).optional(), gdprConsent: z.boolean().default(false), notes: z.string().optional(), }); export type CreateMemberInput = z.infer; export const UpdateMemberSchema = CreateMemberSchema.partial().extend({ memberId: z.string().uuid(), }); export type UpdateMemberInput = z.infer; export const CreateDuesCategorySchema = z.object({ accountId: z.string().uuid(), name: z.string().min(1).max(128), description: z.string().optional(), amount: z.number().min(0), interval: z.enum(['monthly', 'quarterly', 'half_yearly', 'yearly']).default('yearly'), isDefault: z.boolean().default(false), }); export type CreateDuesCategoryInput = z.infer;