export type PauseDuration = '1 Month' | '2 Months' | '3 Months' | 'Custom Date'; export type PauseStep = 'select' | 'confirm' | 'success'; export interface PauseOption { value: PauseDuration; date: Date | null; description?: string; } export type SubscriptionStatus = 'Active' | 'Paused' | 'Canceled' | 'Expired' | 'PendingCancel'; export type BillingFrequency = 'monthly' | 'yearly' | 'quarterly' | 'weekly' | 'biweekly'; export interface SubscriptionData { id?: string; name: string; price: number; billingFrequency: BillingFrequency; nextDeliveryDate: Date; status: SubscriptionStatus; startDate?: Date; description?: string; productId?: string; customerId?: string; isGift?: boolean; } export interface PauseConfirmationData { pauseFrom: Date; resumeOn: Date; pauseDuration: PauseDuration; deliveriesPaused: number; reminderDays: number; } export interface PauseSuccessResult { pauseFrom: Date; resumeOn: Date; sendReminder: boolean; reminderDays: number; pauseDuration: PauseDuration; } export interface SubscriptionHistoryItem { date: Date; action: 'created' | 'paused' | 'resumed' | 'canceled' | 'modified'; details: string; } export interface SubscriptionDelivery { id?: string; scheduledDate: Date; status: 'scheduled' | 'processing' | 'shipped' | 'delivered' | 'skipped' | 'failed'; trackingNumber?: string; carrier?: string; items?: DeliveryItem[]; } export interface DeliveryItem { id: string; name: string; quantity: number; price: number; } export interface SubscriptionSettings { autoRenew: boolean; paymentMethod: PaymentMethod; shippingAddress: Address; billingAddress?: Address; notifications: NotificationSettings; } export interface PaymentMethod { id: string; type: 'credit_card' | 'paypal' | 'bank_account'; lastFour?: string; expiryDate?: string; holderName?: string; isDefault: boolean; } export interface Address { line1: string; line2?: string; city: string; state: string; postalCode: string; country: string; isDefault?: boolean; } export interface NotificationSettings { email: boolean; sms: boolean; push: boolean; reminderDays: number; }