Aktywacja subskrypcji po opłaceniu

/**
 * Scalona obsługa zamówień subskrypcji:
 * - Automatyczne oznaczanie jako "completed" dla produktów wirtualnych
 * - Automatyczna aktywacja subskrypcji po opłaceniu
 * 
 * UWAGA: Przy subskrypcji dostępna jest tylko możliwość płatności kartą.
 * Inne metody (np. Przelewy24) nie wspierają automatycznego odnawiania subskrypcji.
 */

// Unikalne nazwy funkcji żeby uniknąć konfliktów
if (!function_exists('custom_handle_subscription_payment_v2')) {
    
    // Główny handler dla payment_complete
    add_action('woocommerce_payment_complete', 'custom_handle_subscription_payment_v2', 10, 1);
    
    // Dodatkowe hooki dla aktywacji subskrypcji
    add_action('woocommerce_order_status_completed', 'custom_activate_subscription_completed_v2');
    add_action('woocommerce_thankyou', 'custom_activate_subscription_thankyou_v2');
    
    /**
     * Główna funkcja obsługująca payment_complete
     * Łączy funkcjonalność auto-complete i aktywacji subskrypcji
     */
    function custom_handle_subscription_payment_v2($order_id) {
        if (!$order_id) return;
        
        $order = wc_get_order($order_id);
        if (!$order) return;
        
        // 1. NAJPIERW: Aktywuj subskrypcję (przed zmianą statusu zamówienia)
        custom_activate_subscription_after_payment_v2($order_id);
        
        // 2. POTEM: Sprawdź czy można auto-complete zamówienie
        custom_auto_complete_virtual_orders_v2($order_id, $order);
    }
    
    /**
     * Aktywacja subskrypcji po potwierdzeniu płatności
     */
    function custom_activate_subscription_after_payment_v2($order_id) {
        if (!function_exists('wcs_get_subscriptions_for_order')) return;
        
        $subscriptions = wcs_get_subscriptions_for_order($order_id);
        
        foreach ($subscriptions as $subscription) {
            if (!in_array($subscription->get_status(), ['active', 'pending-cancel'])) {
                $subscription->update_status('active', __('Subskrypcja aktywowana po potwierdzeniu płatności.', 'woocommerce-subscriptions'));
            }
        }
    }
    
    /**
     * Auto-complete dla zamówień zawierających tylko produkty wirtualne
     */
    function custom_auto_complete_virtual_orders_v2($order_id, $order) {
        // Nie ruszaj jeśli już completed
        if ($order->get_status() === 'completed') return;
        
        $is_virtual = true;
        foreach ($order->get_items() as $item) {
            $product = $item->get_product();
            // Jeśli produkt nie istnieje lub nie jest wirtualny – nie kończ zamówienia
            if (!$product || !$product->is_virtual()) {
                $is_virtual = false;
                break;
            }
        }
        
        if ($is_virtual) {
            $order->update_status('completed', __('Zamówienie automatycznie ukończone - produkty wirtualne.'));
        }
    }
    
    /**
     * Aktywacja subskrypcji gdy zamówienie przejdzie w status completed
     */
    function custom_activate_subscription_completed_v2($order_id) {
        if (!function_exists('wcs_get_subscriptions_for_order')) return;
        
        $order = wc_get_order($order_id);
        if (!$order) return;
        
        $subscriptions = wcs_get_subscriptions_for_order($order_id, array('order_type' => array('parent', 'renewal')));
        
        foreach ($subscriptions as $subscription) {
            if (!in_array($subscription->get_status(), ['active', 'pending-cancel'])) {
                $subscription->update_status('active', __('Subskrypcja automatycznie aktywowana po ukończeniu zamówienia.', 'woocommerce-subscriptions'));
                $order->add_order_note(sprintf(__('Subskrypcja #%s została automatycznie aktywowana.', 'woocommerce-subscriptions'), $subscription->get_id()));
            }
        }
    }
    
    /**
     * Aktywacja subskrypcji na stronie podziękowania (backup)
     */
    function custom_activate_subscription_thankyou_v2($order_id) {
        if (!$order_id) return;
        
        $order = wc_get_order($order_id);
        if (!$order || !$order->is_paid()) return;
        
        if (function_exists('wcs_get_subscriptions_for_order')) {
            $subscriptions = wcs_get_subscriptions_for_order($order_id);
            
            foreach ($subscriptions as $subscription) {
                if (!in_array($subscription->get_status(), ['active', 'pending-cancel'])) {
                    $subscription->update_status('active', __('Subskrypcja aktywowana na stronie podziękowania.', 'woocommerce-subscriptions'));
                }
            }
        }
    }
}