import type { Listing, User } from '@prisma/client'; export type BillingConfig = { accountName: string | null; iban: string | null; includeVatLine: boolean; }; type BillingUser = Pick; type BillingListing = Pick; export function normalizeOptionalString(input: unknown): string | null | undefined { if (input === undefined) return undefined; if (input === null) return null; const value = String(input).trim(); return value ? value : null; } export function normalizeIban(input: unknown): string | null | undefined { if (input === undefined) return undefined; if (input === null) return null; const value = String(input).replace(/\s+/g, '').toUpperCase(); return value ? value : null; } export function normalizeNullableBoolean(input: unknown): boolean | null | undefined { if (input === undefined) return undefined; if (input === null) return null; return Boolean(input); } export function resolveBillingDetails(user: BillingUser, listing?: BillingListing | null): BillingConfig { const accountName = listing?.billingAccountName ?? user.billingAccountName ?? null; const iban = listing?.billingIban ?? user.billingIban ?? null; const includeVatLine = listing?.billingIncludeVatLine !== null && listing?.billingIncludeVatLine !== undefined ? Boolean(listing.billingIncludeVatLine) : Boolean(user.billingIncludeVatLine); return { accountName, iban, includeVatLine }; }