import { z } from 'zod'; import { timestampSchema } from './common.schemas'; export const tokenTransactionTypeEnum = z.enum([ 'purchase', 'consumption', 'grant', 'bonus', 'refund', ]); export const tokenFeatureEnum = z.enum([ 'voice_command', 'cloud_analytics', 'voice_call', 'proactive_call', 'dashboard_access', ]); export const walletSchema = z .object({ id: z.string().uuid(), shopId: z.string().uuid(), balance: z.number().int(), lifetimeEarned: z.number().int(), lifetimeSpent: z.number().int(), lastGrantAt: z.coerce.date().nullable(), }) .merge(timestampSchema); export const tokenTransactionSchema = z.object({ id: z.string().uuid(), walletId: z.string().uuid(), type: tokenTransactionTypeEnum, amount: z.number().int(), feature: tokenFeatureEnum.nullable(), description: z.string().nullable(), referenceId: z.string().nullable(), createdAt: z.coerce.date(), }); export const tokenBundleSchema = z.object({ id: z.string().uuid(), name: z.string(), price: z.number(), currency: z.string(), tokenAmount: z.number().int(), bonusTokens: z.number().int(), isActive: z.boolean(), }); export const purchaseTokensSchema = z.object({ bundleId: z.string().uuid(), paymentRef: z.string().optional(), paymentMethod: z.literal('paystack'), }); export const verifyTokenPaymentSchema = z.object({ provider: z.literal('paystack'), transactionRef: z.string(), }); export type Wallet = z.infer; export type TokenTransaction = z.infer; export type TokenBundle = z.infer; export type PurchaseTokensInput = z.infer; export type VerifyTokenPaymentInput = z.infer;