# WishlistAjax ক্লাস

**নেমস্পেস:** `Bizzwishlist\Ajax`  
**ফাইল:** `includes/Ajax/WishlistAjax.php`

## বর্ণনা

`WishlistAjax` ক্লাস উইশলিস্টের সকল AJAX রিকোয়েস্ট হ্যান্ডেল করে। প্রতিটি মেথডে nonce যাচাই করা হয় নিরাপত্তার জন্য।

## প্রপার্টি সমূহ

| প্রপার্টি | ধরন | বর্ণনা |
|-----------|------|--------|
| `$repository` | `WishlistRepository` | ডাটাবেস রিপোজিটরি |
| `$session` | `Session` | সেশন হেল্পার |

## মেথড সমূহ

### `toggle()`
- **AJAX অ্যাকশন:** `bizzwishlist_toggle`
- **POST প্যারামিটার:** `product_id`, `variation_id` (ঐচ্ছিক, ডিফল্ট ০), `nonce`
- প্রোডাক্ট উইশলিস্টে থাকলে সরায়, না থাকলে যোগ করে।
- যোগ করলে সব আইটেমের ডেটা (`items`) পাঠায় পপ-আপের জন্য।
- ভেরিয়েশন সহ উইশলিস্টে যোগ/সরানো সাপোর্ট করে।

### `remove()`
- **AJAX অ্যাকশন:** `bizzwishlist_remove`
- **POST প্যারামিটার:** `product_id`, `variation_id` (ঐচ্ছিক), `nonce`
- উইশলিস্ট থেকে প্রোডাক্ট সরায়।

### `add_all_to_cart()`
- **AJAX অ্যাকশন:** `bizzwishlist_add_all_to_cart`
- **POST প্যারামিটার:** `nonce`
- সকল উইশলিস্ট আইটেম WooCommerce কার্টে যোগ করে।
- ভেরিয়েশন থাকলে সঠিক ভেরিয়েশন সহ কার্টে যোগ করে।
- ভেরিয়েবল প্রোডাক্টে ভেরিয়েশন না থাকলে স্কিপ করে।

### `add_to_cart_single()`
- **AJAX অ্যাকশন:** `bizzwishlist_add_to_cart_single`
- **POST প্যারামিটার:** `product_id`, `variation_id` (ঐচ্ছিক), `nonce`
- একটি প্রোডাক্ট AJAX দিয়ে কার্টে যোগ করে।
- মিনি উইশলিস্ট ও পপ-আপের কার্ট বাটনে ব্যবহৃত।
- সফল হলে `wc_fragment_refresh` ইভেন্ট ট্রিগার হয়।

### `get_count()`
- **AJAX অ্যাকশন:** `bizzwishlist_get_count`
- বর্তমান উইশলিস্ট আইটেম সংখ্যা রিটার্ন করে।

### `get_items()`
- **AJAX অ্যাকশন:** `bizzwishlist_get_items`
- সকল আইটেমের প্রোডাক্ট ডেটা রিটার্ন করে (পপ-আপ ও মিনি উইশলিস্ট রিফ্রেশের জন্য)।
- প্রতিটি আইটেমে `variation_id`, `variation_label`, `can_add_to_cart`, `is_variable` ফিল্ড থাকে।

### `add_selected_to_cart()`
- **AJAX অ্যাকশন:** `bizzwishlist_add_selected_to_cart`
- **POST প্যারামিটার:** `product_ids`, `nonce`
- চেকবক্সে নির্বাচিত আইটেমগুলো কার্টে যোগ করে।
- ডাটাবেস থেকে ভেরিয়েশন আইডি বের করে সঠিকভাবে কার্টে যোগ করে।

### `build_items_data( array $owner )` (প্রাইভেট)
- **রিটার্ন:** `array`
- সকল আইটেমের ডেটা অ্যারে তৈরি করে AJAX রেসপন্সের জন্য।
- ভেরিয়েবল প্রোডাক্ট, ভেরিয়েশন লেবেল, কার্টে যোগ করার সক্ষমতা ইত্যাদি ক্যালকুলেট করে।
