# Bizzwishlist - পরিবর্তন ডকুমেন্টেশন (v1.1.0)

## সূচিপত্র

1. [নতুন ফিচার সমূহ](#নতুন-ফিচার-সমূহ)
2. [নতুন ফাইলসমূহ](#নতুন-ফাইলসমূহ)
3. [পরিবর্তিত ফাইলসমূহ](#পরিবর্তিত-ফাইলসমূহ)
4. [এডমিন সেটিংস](#এডমিন-সেটিংস)
5. [Getting Started পেজ](#getting-started-পেজ)
6. [পপ-আপ সিস্টেম](#পপ-আপ-সিস্টেম)
7. [মিনি উইশলিস্ট উইজেট](#মিনি-উইশলিস্ট-উইজেট)
8. [শেয়ারিং সিস্টেম](#শেয়ারিং-সিস্টেম)
9. [চেকবক্স ফিচার](#চেকবক্স-ফিচার)
10. [নতুন AJAX এন্ডপয়েন্ট](#নতুন-ajax-এন্ডপয়েন্ট)
11. [JavaScript পরিবর্তন](#javascript-পরিবর্তন)
12. [CSS পরিবর্তন](#css-পরিবর্তন)

---

## নতুন ফিচার সমূহ

### ১. এডমিন প্যানেল (Bizz Wishlist মেনু)
- WordPress এডমিনে "Bizz Wishlist" নামে একটি নতুন মেনু যোগ করা হয়েছে
- সেটিংস পেজ থেকে প্লাগিনের সকল অপশন কন্ট্রোল করা যায়
- "Getting Started" সাব-পেজে প্লাগিন ব্যবহারের গাইড দেওয়া আছে (ইংরেজিতে)

### ২. পপ-আপ (Popup)
- "Add to Wishlist" বাটনে ক্লিক করলে একটি পপ-আপ ওপেন হয়
- পপ-আপে বর্তমান উইশলিস্টের সকল আইটেম দেখায়
- প্রতিটি আইটেমে কার্টে যোগ ও রিমুভ করার বাটন আছে
- "View Full Wishlist" বাটনে ক্লিক করলে উইশলিস্ট পেজে যায়
- এডমিন থেকে পপ-আপ অন/অফ করা যায়
- পপ-আপ অফ থাকলে, আইটেম এড করার পর একটি লিংক দেখায় উইশলিস্ট পেজে যেতে

### ৩. মিনি উইশলিস্ট (Mini Wishlist Widget)
- WooCommerce এর মিনি কার্টের মতো একটি কমপ্যাক্ট উইশলিস্ট উইজেট
- `[bizzwishlist_mini]` শর্টকোড দিয়ে যেকোনো জায়গায় ব্যবহার করা যায়
- প্রতিটি আইটেমে ছবি, নাম, দাম এবং অ্যাকশন বাটন আছে
- এডমিন থেকে অটো-ডিসপ্লে অন করলে ফুটারে স্বয়ংক্রিয়ভাবে দেখায়
- AJAX দিয়ে রিয়েল-টাইমে আপডেট হয়

### ৪. শেয়ারিং সিস্টেম
- প্রতিটি ইউজারের জন্য ইউনিক উইশলিস্ট URL তৈরি হয়
- লগইন ইউজারদের জন্য user_id ভিত্তিক, গেস্টদের জন্য session_key ভিত্তিক
- উইশলিস্ট পেজে "Share Wishlist" বাটন আছে
- ক্লিক করলে লিংক ক্লিপবোর্ডে কপি হয়
- শেয়ার করা উইশলিস্ট দেখার সময় read-only মোডে দেখায় (রিমুভ বাটন থাকবে না)
- এডমিন থেকে শেয়ারিং অন/অফ করা যায়

### ৫. চেকবক্স ফিচার
- উইশলিস্ট পেজের প্রতিটি আইটেমে চেকবক্স আছে
- "Select All" চেকবক্স দিয়ে সবগুলো সিলেক্ট করা যায়
- "Add Selected to Cart" বাটনে ক্লিক করলে শুধু সিলেক্ট করা আইটেম কার্টে যোগ হয়
- "Add All to Cart" বাটনও আছে সবগুলো একসাথে যোগ করতে

---

## নতুন ফাইলসমূহ

### `includes/Admin/Settings.php`
**ক্লাস:** `Bizzwishlist\Admin\Settings`

এডমিন সেটিংস পেজ ও Getting Started পেজ হ্যান্ডেল করে।

**মূল দায়িত্ব:**
- WordPress এডমিন মেনু রেজিস্টার করে ("Bizz Wishlist")
- সেটিংস রেজিস্টার ও সেভ করে (`bizzwishlist_settings` অপশন)
- সেটিংস পেজ রেন্ডার করে (popup on/off, mini wishlist on/off, auto-display, sharing, page selection)
- Getting Started পেজ রেন্ডার করে
- এডমিন CSS লোড করে

**স্ট্যাটিক হেল্পার মেথড:**
| মেথড | রিটার্ন | বিবরণ |
|------|---------|-------|
| `get($key, $default)` | `mixed` | সেটিংস ভ্যালু পায় |
| `is_popup_enabled()` | `bool` | পপ-আপ অন কিনা |
| `is_mini_wishlist_enabled()` | `bool` | মিনি উইশলিস্ট অন কিনা |
| `is_mini_wishlist_display()` | `bool` | অটো-ডিসপ্লে অন কিনা |
| `is_share_enabled()` | `bool` | শেয়ারিং অন কিনা |

**সেটিংস অপশন কী:**
```
bizzwishlist_settings = [
    'popup_enabled'         => 'yes' / 'no',
    'mini_wishlist_enabled' => 'yes' / 'no',
    'mini_wishlist_display'    => 'yes' / 'no',
    'share_enabled'         => 'yes' / 'no',
    'wishlist_page_id'      => int,
]
```

---

### `includes/Frontend/WishlistPopup.php`
**ক্লাস:** `Bizzwishlist\Frontend\WishlistPopup`

পপ-আপ কন্টেইনারের HTML মার্কআপ রেন্ডার করে।

**মেথড:**
- `render_popup_container()` — ফুটারে পপ-আপ ওভারলে HTML রেন্ডার করে
- পপ-আপের কন্টেন্ট JavaScript দিয়ে AJAX এর মাধ্যমে পূরণ হয়

---

### `includes/Frontend/MiniWishlist.php`
**ক্লাস:** `Bizzwishlist\Frontend\MiniWishlist`

মিনি উইশলিস্ট উইজেট রেন্ডার করে।

**মেথড:**
| মেথড | বিবরণ |
|------|-------|
| `render_shortcode()` | `[bizzwishlist_mini]` শর্টকোড হ্যান্ডেল করে |
| `render_widget()` | উইজেটের HTML রেন্ডার করে |
| `render_auto_display()` | ফুটারে অটো-ডিসপ্লে রেন্ডার (সেটিং অনুযায়ী) |

**উইজেটের বিষয়বস্তু:**
- হেডার (শিরোনাম + কাউন্ট)
- আইটেম লিস্ট (ছবি, নাম, দাম, কার্ট/রিমুভ বাটন)
- ফুটার ("View Wishlist" বাটন)
- AJAX দিয়ে রিয়েল-টাইমে রিফ্রেশ হয়

---

### `assets/css/admin.css`
এডমিন পেজের স্টাইল:
- সেটিংস কার্ড লেআউট
- Getting Started পেজের গ্রিড লেআউট ও ফিচার কার্ড
- টেবিল ও কোড ব্লক স্টাইল

---

## পরিবর্তিত ফাইলসমূহ

### `includes/Plugin.php`
**পরিবর্তন:**
- নতুন ক্লাস ইম্পোর্ট: `WishlistPopup`, `MiniWishlist`, `Settings`
- নতুন ফ্রন্টএন্ড হুক:
  - `wp_footer` → `WishlistPopup::render_popup_container()` (পপ-আপ কন্টেইনার)
  - `wp_footer` → `MiniWishlist::render_auto_display()` (অটো মিনি উইশলিস্ট)
  - `bizzwishlist_mini` শর্টকোড রেজিস্ট্রেশন
- নতুন AJAX হুক:
  - `bizzwishlist_get_items` — পপ-আপ ও মিনি উইশলিস্টের জন্য আইটেম ডেটা
  - `bizzwishlist_add_selected_to_cart` — সিলেক্ট করা আইটেম কার্টে
- এডমিন `Settings` ক্লাস রেজিস্ট্রেশন
- `query_vars` ফিল্টার — `bizzwishlist_share` কুয়েরি ভ্যারিয়েবল

---

### `includes/Ajax/WishlistAjax.php`
**পরিবর্তন:**
- `toggle()` মেথড আপডেট — এখন আইটেম যোগ করার পর পপ-আপের জন্য সকল আইটেমের ডেটা রিটার্ন করে
- নতুন `get_items()` মেথড — সকল উইশলিস্ট আইটেমের বিস্তারিত তথ্য রিটার্ন করে (ছবি, দাম, লিংক সহ)
- নতুন `add_selected_to_cart()` মেথড — নির্দিষ্ট প্রোডাক্ট ID গুলো কার্টে যোগ করে

---

### `includes/Frontend/Assets.php`
**পরিবর্তন:**
- `Settings` ক্লাস ইম্পোর্ট
- `wp_localize_script` এ নতুন প্যারামিটার:
  - `popup_enabled` — পপ-আপ অন কিনা
  - `share_enabled` — শেয়ারিং অন কিনা
  - নতুন i18n স্ট্রিং: `my_wishlist`, `add_to_cart`, `remove`, `view_full`, `empty_wishlist`, `share_wishlist`, `link_copied`, `no_items_selected`

---

### `includes/Frontend/WishlistPage.php`
**পরিবর্তন:**
- শেয়ার URL তৈরি করে টেমপ্লেটে পাস করে
- `bizzwishlist_share` কুয়েরি প্যারামিটার চেক করে শেয়ার করা উইশলিস্ট দেখায়
- শেয়ার করা উইশলিস্ট read-only মোডে দেখায় (রিমুভ বাটন নেই)
- নতুন `render_shared_wishlist()` মেথড
- নতুন `get_share_url()` মেথড

---

### `templates/wishlist-page.php`
**পরিবর্তন:**
- চেকবক্স কলাম যোগ ("Select All" হেডার + প্রতিটি আইটেমে চেকবক্স)
- "Add Selected to Cart" বাটন যোগ
- "Share Wishlist" বাটন যোগ (শেয়ারিং অন থাকলে)
- শেয়ার করা উইশলিস্ট নোটিস দেখানো
- শেয়ার মোডে রিমুভ বাটন ও চেকবক্স লুকানো
- নতুন টেমপ্লেট ভ্যারিয়েবল: `$share_url`, `$is_shared`

---

### `assets/js/wishlist.js`
**পরিবর্তন:**

**নতুন ইভেন্ট হ্যান্ডলার:**
- পপ-আপ ক্লোজ বাটন ক্লিক
- পপ-আপ ওভারলে ক্লিক (বাইরে ক্লিক করে বন্ধ)
- পপ-আপ আইটেম রিমুভ
- মিনি উইশলিস্ট আইটেম রিমুভ
- চেকবক্স "Select All"
- "Add Selected to Cart" বাটন
- "Share Wishlist" বাটন

**নতুন ফাংশনসমূহ:**
| ফাংশন | বিবরণ |
|--------|-------|
| `showPopup(items)` | পপ-আপ দেখায় আইটেম লিস্ট সহ |
| `closePopup()` | পপ-আপ বন্ধ করে |
| `removeFromPopup(productId, $button)` | পপ-আপ থেকে আইটেম রিমুভ |
| `refreshMiniWishlist()` | মিনি উইশলিস্ট AJAX দিয়ে রিফ্রেশ |
| `removeMiniItem(productId, $item)` | মিনি উইশলিস্ট থেকে আইটেম রিমুভ |
| `addSelectedToCart($button)` | সিলেক্ট করা আইটেম কার্টে |
| `shareWishlist($button)` | ক্লিপবোর্ডে লিংক কপি |

**`addToWishlist()` পরিবর্তন:**
- আইটেম যোগ করার পর:
  - পপ-আপ অন থাকলে → পপ-আপ দেখায়
  - পপ-আপ অফ থাকলে → "View Wishlist" লিংক সহ নোটিস দেখায়
- প্রতিটি অপারেশনের পর `refreshMiniWishlist()` কল হয়

---

### `assets/css/wishlist.css`
**নতুন স্টাইল সেকশনসমূহ:**
- **Popup Overlay** — পপ-আপ ওভারলে, কন্টেইনার, হেডার, কন্টেন্ট, ফুটার, আইটেম লিস্ট
- **Mini Wishlist Widget** — মিনি উইজেট, হেডার, আইটেম, ফুটার
- **Share Bar** — শেয়ার বাটন স্টাইল
- **Shared Wishlist Notice** — শেয়ার করা উইশলিস্টের নোটিস
- **Checkbox Column** — চেকবক্স কলাম স্টাইল

---

### `uninstall.php`
**পরিবর্তন:**
- `bizzwishlist_settings` অপশন ডিলিট যোগ করা হয়েছে

---

## এডমিন সেটিংস

### মেনু স্ট্রাকচার
```
Bizz Wishlist (dashicons-heart)
├── Settings (মূল সেটিংস পেজ)
└── Getting Started (ব্যবহার গাইড)
```

### সেটিংস সেকশনসমূহ

**General Settings:**
- Wishlist Page — ড্রপডাউন থেকে পেজ সিলেক্ট

**Popup Settings:**
- Enable Popup — চেকবক্স (ডিফল্ট: অন)

**Mini Wishlist Settings:**
- Enable Mini Wishlist — চেকবক্স (ডিফল্ট: অন)
- Auto-Display Mini Wishlist — চেকবক্স (ডিফল্ট: অফ)

**Sharing Settings:**
- Enable Sharing — চেকবক্স (ডিফল্ট: অন)

---

## Getting Started পেজ

সম্পূর্ণ ইংরেজিতে লেখা। নিচের বিষয়গুলো কভার করে:

- Quick Setup গাইড
- Wishlist Button কিভাবে কাজ করে
- Popup or Link অপশন
- Mini Wishlist Widget ও শর্টকোড
- Unique Shareable Links
- Guest & Logged-in Support
- Available Shortcodes টেবিল
- REST API তথ্য
- Theme Template Override গাইড

ডিজাইনে গ্রেডিয়েন্ট হেডার, ফিচার কার্ড গ্রিড এবং সুন্দর টাইপোগ্রাফি ব্যবহার করা হয়েছে।

---

## পপ-আপ সিস্টেম

### কিভাবে কাজ করে

১. ইউজার "Add to Wishlist" বাটনে ক্লিক করে
২. AJAX রিকোয়েস্ট যায় `bizzwishlist_toggle` অ্যাকশনে
৩. সার্ভার আইটেম যোগ করে এবং সকল আইটেমের ডেটা রিটার্ন করে
৪. `popup_enabled` সেটিং অনুযায়ী:
   - **অন:** JavaScript পপ-আপ ওপেন করে আইটেম লিস্ট সহ
   - **অফ:** "View Wishlist" লিংক সহ নোটিস দেখায়
৫. পপ-আপে আইটেম রিমুভ করলে AJAX দিয়ে রিমুভ হয় এবং UI আপডেট হয়

### পপ-আপ HTML স্ট্রাকচার
```html
<div id="bizzwishlist-popup-overlay">
    <div class="bizzwishlist-popup">
        <button class="bizzwishlist-popup-close">×</button>
        <div class="bizzwishlist-popup-header"><h3>My Wishlist</h3></div>
        <div class="bizzwishlist-popup-content">
            <!-- AJAX দিয়ে পূরণ হয় -->
        </div>
        <div class="bizzwishlist-popup-footer">
            <a href="..." class="bizzwishlist-popup-view-all">View Full Wishlist</a>
        </div>
    </div>
</div>
```

---

## মিনি উইশলিস্ট উইজেট

### শর্টকোড
```
[bizzwishlist_mini]
```

### কিভাবে ব্যবহার করবেন

**১. শর্টকোড দিয়ে:**
- যেকোনো পেজ, পোস্ট, সাইডবার বা উইজেটে `[bizzwishlist_mini]` যোগ করুন

**২. অটো-ডিসপ্লে:**
- এডমিন → Bizz Wishlist → Settings → "Auto-Display Mini Wishlist" অন করুন
- ফুটারে স্বয়ংক্রিয়ভাবে দেখাবে

### উইজেটের ফিচার
- প্রোডাক্ট থাম্বনেইল (40x40)
- প্রোডাক্ট নাম (লিংক সহ)
- দাম
- কার্টে যোগ করার বাটন (🛒)
- রিমুভ বাটন (×)
- "View Wishlist" বাটন
- আইটেম কাউন্ট দেখায়
- AJAX দিয়ে রিয়েল-টাইমে আপডেট হয়

---

## শেয়ারিং সিস্টেম

### URL ফরম্যাট
```
https://yoursite.com/wishlist/?bizzwishlist_share=<key>
```

- লগইন ইউজার: `key` = user_id (সংখ্যা)
- গেস্ট ইউজার: `key` = session_key (UUID)

### শেয়ার URL কিভাবে তৈরি হয়
১. `WishlistPage::get_share_url()` মেথড `get_owner()` থেকে user_id বা session_key নেয়
২. Wishlist পেজের URL এ `bizzwishlist_share` কুয়েরি প্যারামিটার যোগ করে
৩. টেমপ্লেটে শেয়ার বাটনের `data-share-url` এট্রিবিউটে পাস করে

### শেয়ার করা উইশলিস্ট দেখা
১. কেউ শেয়ার করা URL ওপেন করলে `WishlistPage::render_shared_wishlist()` কল হয়
২. শেয়ার কী দিয়ে প্রথমে user_id হিসেবে চেক, তারপর session_key হিসেবে চেক
৩. Read-only মোডে দেখায় — কোনো রিমুভ বাটন বা চেকবক্স নেই
৪. "You are viewing a shared wishlist" নোটিস দেখায়

---

## চেকবক্স ফিচার

### কিভাবে কাজ করে
১. প্রতিটি উইশলিস্ট আইটেমের বামে একটি চেকবক্স আছে
২. হেডারে "Select All" চেকবক্স আছে — ক্লিক করলে সব সিলেক্ট/ডিসিলেক্ট হয়
৩. "Add Selected to Cart" বাটনে ক্লিক করলে:
   - সিলেক্ট করা আইটেমগুলোর product_id নিয়ে AJAX রিকোয়েস্ট পাঠায়
   - `bizzwishlist_add_selected_to_cart` অ্যাকশন হ্যান্ডেল করে
   - সফল হলে কার্ট পেজে রিডাইরেক্ট হয়
৪. শেয়ার করা উইশলিস্ট দেখার সময় চেকবক্স দেখায় না

---

## নতুন AJAX এন্ডপয়েন্ট

### `bizzwishlist_get_items`
উইশলিস্টের সকল আইটেমের বিস্তারিত তথ্য রিটার্ন করে।

```
Action: bizzwishlist_get_items
Method: POST
Parameters:
  - nonce: bizzwishlist_nonce

Response:
{
    "success": true,
    "data": {
        "items": [
            {
                "product_id": 42,
                "name": "T-Shirt",
                "price_html": "<span>$29.99</span>",
                "image": "<img src='...' />",
                "permalink": "https://...",
                "add_to_cart": "https://...?add-to-cart=42",
                "in_stock": true
            }
        ],
        "count": 3
    }
}
```

### `bizzwishlist_add_selected_to_cart`
নির্দিষ্ট প্রোডাক্ট ID গুলো কার্টে যোগ করে।

```
Action: bizzwishlist_add_selected_to_cart
Method: POST
Parameters:
  - nonce: bizzwishlist_nonce
  - product_ids[]: array of integers

Response:
{
    "success": true,
    "data": {
        "message": "3 items added to cart.",
        "cart_url": "https://example.com/cart/"
    }
}
```

### `bizzwishlist_toggle` (আপডেট)
আইটেম যোগ করার পরে এখন `items` অ্যারে রিটার্ন করে (পপ-আপের জন্য)।

```
Response (Added):
{
    "success": true,
    "data": {
        "action": "added",
        "count": 3,
        "message": "Added to wishlist.",
        "items": [ ... ]  ← নতুন
    }
}
```

---

## JavaScript পরিবর্তন

### নতুন `bizzwishlist_params` প্যারামিটার
```javascript
bizzwishlist_params.popup_enabled  // bool — পপ-আপ অন কিনা
bizzwishlist_params.share_enabled  // bool — শেয়ারিং অন কিনা
bizzwishlist_params.i18n.my_wishlist       // "My Wishlist"
bizzwishlist_params.i18n.add_to_cart       // "Add to Cart"
bizzwishlist_params.i18n.remove            // "Remove"
bizzwishlist_params.i18n.view_full         // "View Full Wishlist"
bizzwishlist_params.i18n.empty_wishlist    // "Your wishlist is empty."
bizzwishlist_params.i18n.share_wishlist    // "Share Wishlist"
bizzwishlist_params.i18n.link_copied       // "Link copied to clipboard!"
bizzwishlist_params.i18n.no_items_selected // "No items selected."
```

### পাবলিক API
```javascript
BizzWishlist.init()              // ইনিশিয়ালাইজ
BizzWishlist.updateCounter()     // কাউন্টার আপডেট
BizzWishlist.refreshMiniWishlist() // মিনি উইশলিস্ট রিফ্রেশ  ← নতুন
```

---

## CSS পরিবর্তন

### নতুন CSS ফাইল
- `assets/css/admin.css` — এডমিন পেজের স্টাইল

### `assets/css/wishlist.css` এ নতুন সেকশন
- **Popup Overlay** (`.bizzwishlist-popup-*`) — পপ-আপের সকল স্টাইল
- **Mini Wishlist Widget** (`.bizzwishlist-mini-*`) — মিনি উইজেটের সকল স্টাইল
- **Share Bar** (`.bizzwishlist-share-*`) — শেয়ার বাটন
- **Shared Wishlist Notice** (`.bizzwishlist-shared-notice`) — শেয়ার নোটিস
- **Checkbox Column** (`.bizzwishlist-col-check`) — চেকবক্স স্টাইল
