[ 'type' => 'select', 'label' => __('Default Subscription Status', 'woonoow'), 'description' => __('Status for new subscriptions after successful payment', 'woonoow'), 'options' => [ 'active' => __('Active', 'woonoow'), 'pending' => __('Pending', 'woonoow'), ], 'default' => 'active', ], 'button_text_subscribe' => [ 'type' => 'text', 'label' => __('Subscribe Button Text', 'woonoow'), 'description' => __('Text for the subscribe button on subscription products', 'woonoow'), 'placeholder' => 'Subscribe Now', 'default' => 'Subscribe Now', ], 'button_text_renew' => [ 'type' => 'text', 'label' => __('Renew Button Text', 'woonoow'), 'description' => __('Text for the renewal button', 'woonoow'), 'placeholder' => 'Renew Subscription', 'default' => 'Renew Subscription', ], 'allow_customer_cancel' => [ 'type' => 'toggle', 'label' => __('Allow Customer Cancellation', 'woonoow'), 'description' => __('Allow customers to cancel their own subscriptions', 'woonoow'), 'default' => true, ], 'allow_customer_pause' => [ 'type' => 'toggle', 'label' => __('Allow Customer Pause', 'woonoow'), 'description' => __('Allow customers to pause and resume their subscriptions', 'woonoow'), 'default' => true, ], 'max_pause_count' => [ 'type' => 'number', 'label' => __('Maximum Pause Count', 'woonoow'), 'description' => __('Maximum number of times a subscription can be paused (0 = unlimited)', 'woonoow'), 'default' => 3, 'min' => 0, 'max' => 10, ], 'renewal_retry_enabled' => [ 'type' => 'toggle', 'label' => __('Retry Failed Renewals', 'woonoow'), 'description' => __('Automatically retry failed renewal payments', 'woonoow'), 'default' => true, ], 'renewal_retry_days' => [ 'type' => 'text', 'label' => __('Retry Days', 'woonoow'), 'description' => __('Days after failure to retry payment (comma-separated, e.g., 1,3,5)', 'woonoow'), 'placeholder' => '1,3,5', 'default' => '1,3,5', ], 'expire_after_failed_attempts' => [ 'type' => 'number', 'label' => __('Max Failed Attempts', 'woonoow'), 'description' => __('Number of failed payment attempts before subscription expires', 'woonoow'), 'default' => 3, 'min' => 1, 'max' => 10, ], 'send_renewal_reminder' => [ 'type' => 'toggle', 'label' => __('Send Renewal Reminders', 'woonoow'), 'description' => __('Send email reminder before subscription renewal', 'woonoow'), 'default' => true, ], 'reminder_days_before' => [ 'type' => 'number', 'label' => __('Reminder Days Before', 'woonoow'), 'description' => __('Days before renewal to send reminder email', 'woonoow'), 'default' => 3, 'min' => 1, 'max' => 14, ], 'force_manual_renewal' => [ 'type' => 'toggle', 'label' => __('Force Manual Renewal (Override All Gateways)', 'woonoow'), 'description' => __('Treat every gateway as manual-renewal only, regardless of the per-gateway capability table. Use as a kill switch when a regulator or incident requires no auto-debits.', 'woonoow'), 'default' => false, ], 'price_sync_on_renewal' => [ 'type' => 'select', 'label' => __('Renewal Price Sync', 'woonoow'), 'description' => __('What price does a renewal order use when the product price has changed since the subscription started? "Use stored" grandfathers the customer at their original price (recommended). "Use current" re-syncs every renewal to the latest product price.', 'woonoow'), 'options' => [ 'use_stored' => __('Use stored price (grandfather customer)', 'woonoow'), 'use_current_product_price' => __('Use current product price', 'woonoow'), ], 'default' => 'use_stored', ], 'unpaid_renewal_max_age_days' => [ 'type' => 'number', 'label' => __('Unpaid Renewal Auto-Cancel (days)', 'woonoow'), 'description' => __('Days an unpaid manual renewal can stay on-hold before the subscription is auto-cancelled. The customer receives a daily reminder during this window. Set to 0 to disable auto-cancel (not recommended — abandoned-cart revenue leakage).', 'woonoow'), 'default' => 7, 'min' => 1, 'max' => 90, ], ]; return $schemas; } }