/** * Back In Stock Types */ export interface GeneralSettings { showOnOutOfStock: boolean showOnBackorder: boolean allowGuests: boolean requireDoubleOptIn: boolean autoRemoveOnPurchase: boolean subscriptionLimit: number notifyOnPartialStock: boolean minStockToNotify: number } export interface FormSettings { formTitle: string emailPlaceholder: string buttonText: string successMessage: string alreadySubscribedMessage: string errorMessage: string showProductImage: boolean showProductName: boolean } export interface EmailSettings { fromName: string fromEmail: string subject: string heading: string bodyText: string buttonText: string buttonColor: string includePrice: boolean includeImage: boolean includeTitle: boolean } export interface ConfirmEmailSettings { subject: string heading: string bodyText: string buttonText: string } export interface StyleSettings { formDesign: 'modern-minimal' | 'classic-card' | 'bold-gradient' formLayout: 'inline' | 'stacked' buttonStyle: 'filled' | 'outlined' primaryColor: string textColor: string backgroundColor: string borderRadius: number showIcon: boolean // Additional styling options (Pro) padding: number margin: number borderWidth: number borderColor: string // Icon styling (Pro) iconBackgroundColor: string iconColor: string iconBorderRadius: number iconSize: number // Button styling (Pro) buttonTextColor: string buttonBorderRadius: number buttonPadding: number // Input styling (Pro) inputBorderColor: string inputBackgroundColor: string inputTextColor: string inputBorderRadius: number // Typography (Pro) fontFamily: string } export interface BackInStockSettings { enabled: boolean general: GeneralSettings form: FormSettings email: EmailSettings confirmEmail: ConfirmEmailSettings style: StyleSettings } export interface BackInStockProSettings { perProductSubscriptionLimit: number enableCaptcha: boolean } export const defaultBackInStockProSettings: BackInStockProSettings = { perProductSubscriptionLimit: 0, enableCaptcha: false, } export interface Subscription { id: number product_id: number variation_id: number email: string customer_id: number status: 'active' | 'notified' | 'unsubscribed' | 'expired' confirmed: boolean subscribed_at: string notified_at: string | null unsubscribed_at: string | null product_name?: string } export interface NotificationLog { id: number subscription_id: number product_id: number variation_id: number email: string sent_at: string opened_at: string | null clicked_at: string | null purchased_at: string | null status: 'sent' | 'failed' | 'bounced' product_name?: string } export interface AnalyticsStats { totalSubscriptions: number activeSubscriptions: number totalNotificationsSent: number notificationsOpened: number notificationsClicked: number conversions: number openRate: number clickRate: number conversionRate: number } export interface AnalyticsData { stats: AnalyticsStats topProducts: Array<{ product_id: number product_name: string subscription_count: number }> chartData: { subscriptions: Array<{ date: string; count: number }> notifications: Array<{ date: string; count: number }> } recentSubscriptions?: Array<{ id: number product_id: number product_name?: string variation_id: number email: string status: string confirmed: boolean | number subscribed_at: string }> productSubscribers?: Array<{ product_id: number product_name?: string subscription_count: number recent_emails: Array<{ email: string subscribed_at: string status: string confirmed: boolean }> }> }