# Wishlist Button Position – Variation Issue Fix

## সমস্যা (Problem)

Wishlist Button Position সেটিংসে যদি **"After Add to Cart Button"** ছাড়া অন্য কোনো option সিলেক্ট করা হতো (যেমন Before Add to Cart, After Product Title, Before Product Title, Custom Hook, বা None/Shortcode), তাহলে **variable product** এ variation পরিবর্তন করলে `.bizzwishlist-button` এর `data-variation-id` আপডেট হতো না এবং button এর state (Added/Not Added) ও পরিবর্তন হতো না।

### মূল কারণ

JavaScript এর `found_variation` এবং `reset_data` event handler গুলোতে wishlist button খোঁজা হতো এভাবে:

```javascript
var $form   = $( this ).closest( '.variations_form.cart' );
var $button = $form.find( '.bizzwishlist-button' );
```

`$form.find('.bizzwishlist-button')` শুধুমাত্র form এর **ভিতরে** button খুঁজতো।

- **"After Add to Cart"** বা **"Before Add to Cart"** position এ button টি `form.variations_form.cart` এর ভিতরে থাকে → `$form.find()` কাজ করতো ✅
- **"After Product Title"**, **"Before Product Title"**, **"Custom Hook"**, বা **"None"** position এ button টি form এর **বাইরে** থাকে → `$form.find()` কিছু খুঁজে পেতো না → variation অনুযায়ী button আপডেট হতো না ❌

## সমাধান (Fix)

`assets/js/wishlist.js` ফাইলে `found_variation` এবং `reset_data` উভয় handler এ একটি **fallback** যোগ করা হয়েছে। যদি form এর ভিতরে button না পাওয়া যায়, তাহলে form এর `data-product_id` attribute ব্যবহার করে পুরো page এ `data-product-id` match করে button খোঁজা হবে:

```javascript
function findWishlistButton( $form ) {
    var $button = $form.find( '.bizzwishlist-button' );
    if ( ! $button.length ) {
        var productId = parseInt( $form.data( 'product_id' ), 10 );
        if ( productId ) {
            $button = $( '.bizzwishlist-button[data-product-id="' + productId + '"]' );
        }
    }
    return $button;
}
```

এখন `found_variation` ও `reset_data` handler থেকে এই helper function call করা হয়:

```javascript
var $button = findWishlistButton( $form );
```

### কেন এই পদ্ধতি?

- WooCommerce এর `form.variations_form` এ সবসময় `data-product_id` attribute থাকে।
- Button এ `data-product-id` attribute সবসময় render হয় (`WishlistButton::render()` method থেকে)।
- তাই form এর product ID দিয়ে page-wide search করলে সঠিক button পাওয়া যায়, button যেখানেই থাকুক না কেন।

## প্রভাবিত ফাইল

| ফাইল | পরিবর্তন |
|---|---|
| `assets/js/wishlist.js` | `found_variation` ও `reset_data` handler এ fallback button lookup যোগ করা হয়েছে |

## পরীক্ষা (Testing)

1. Admin Settings → Bizzwishlist → **Wishlist Button Position** → "After Product Title" সিলেক্ট করুন।
2. একটি variable product পেজে যান।
3. Variation পরিবর্তন করুন (যেমন size/color select করুন)।
4. লক্ষ্য করুন `.bizzwishlist-button` এর `data-variation-id` সঠিকভাবে আপডেট হচ্ছে।
5. Wishlisted variation সিলেক্ট করলে button "In Wishlist" দেখাচ্ছে।
6. অন্য position গুলোতেও (Before Add to Cart, Before Product Title, Custom Hook) একইভাবে পরীক্ষা করুন।
