# Bizzwishlist Pro - প্রিমিয়াম ভার্সন ডেভেলপমেন্ট গাইড

## ভূমিকা

Bizzwishlist এর ফ্রি ভার্সন এমনভাবে ডিজাইন করা হয়েছে যে প্রিমিয়াম ফিচার যোগ করা অত্যন্ত সহজ হবে। এই ডকুমেন্টে বিস্তারিত বলা হয়েছে কীভাবে একটি প্রিমিয়াম ভার্সন তৈরি করতে হবে।

---

## আর্কিটেকচার পদ্ধতি

### পদ্ধতি ১: আলাদা প্রিমিয়াম প্লাগিন (Addon Model) — **সুপারিশকৃত**

ফ্রি প্লাগিনকে বেস রেখে আলাদা একটি প্রিমিয়াম প্লাগিন তৈরি করা।

**সুবিধা:**
- WordPress.org তে ফ্রি ভার্সন সাবমিট সহজ
- আপডেট ম্যানেজমেন্ট সহজ
- ফ্রি ভার্সনের কোডে কোনো পরিবর্তন করতে হয় না

**স্ট্রাকচার:**
```
bizzwishlist-pro/
├── bizzwishlist-pro.php          ← মূল ফাইল
├── includes/
│   ├── Plugin.php                ← Pro প্লাগিন ক্লাস
│   ├── Autoloader.php
│   │
│   ├── Features/
│   │   ├── MultipleWishlists.php ← একাধিক wishlist
│   │   ├── SocialShare.php       ← সোশ্যাল শেয়ার
│   │   ├── PriceAlert.php        ← দাম কমলে নোটিফিকেশন
│   │   ├── Analytics.php         ← Wishlist analytics
│   │   ├── EmailReminder.php     ← Email reminder
│   │   └── CustomStyles.php      ← কাস্টম স্টাইলিং
│   │
│   ├── Admin/
│   │   ├── Settings.php          ← সেটিংস পেজ
│   │   ├── Dashboard.php         ← Analytics ড্যাশবোর্ড
│   │   └── License.php           ← লাইসেন্স ম্যানেজমেন্ট
│   │
│   └── API/
│       └── ProRestController.php ← বাড়তি API endpoints
│
├── assets/
│   ├── js/wishlist-pro.js
│   └── css/wishlist-pro.css
│
└── templates/
    ├── multiple-wishlists.php
    └── social-share.php
```

### পদ্ধতি ২: একই প্লাগিনে Pro ফিচার (Feature Toggle)

একটিই প্লাগিন, লাইসেন্স কী থাকলে Pro ফিচার আনলক হয়।

```php
// ফ্রি ভার্সনে চেক করার জন্য ফিল্টার হুক:
if ( apply_filters( 'bizzwishlist_is_pro', false ) ) {
    // Pro ফিচার লোড
}
```

---

## প্রিমিয়াম ফিচার সমূহ

### ১. একাধিক Wishlist (Multiple Wishlists)

ইউজার একাধিক wishlist তৈরি করতে পারবে (যেমন: "Birthday", "Christmas" ইত্যাদি)।

**ডাটাবেস পরিবর্তন:**

নতুন টেবিল: `{prefix}_bizzwishlist_lists`

| কলাম | টাইপ | বিবরণ |
|------|------|-------|
| `id` | bigint, AUTO_INCREMENT | প্রাইমারি কী |
| `user_id` | bigint | ইউজার ID |
| `name` | varchar(255) | Wishlist এর নাম |
| `slug` | varchar(255) | URL slug |
| `privacy` | enum('public', 'private', 'shared') | গোপনীয়তা |
| `share_key` | varchar(100) | শেয়ার করার কী |
| `is_default` | tinyint(1) | ডিফল্ট কিনা |
| `created_at` | datetime | তৈরির সময় |

মূল `bizzwishlist` টেবিলে নতুন কলাম যোগ:
```sql
ALTER TABLE {prefix}_bizzwishlist ADD COLUMN list_id bigint DEFAULT NULL;
```

**ইমপ্লিমেন্টেশন:**

```php
namespace BizzwishlistPro\Features;

class MultipleWishlists {

    public function __construct() {
        add_action( 'init', array( $this, 'register_endpoints' ) );
        add_filter( 'bizzwishlist_button_html', array( $this, 'add_dropdown' ), 10, 2 );
    }

    public function create_list( $user_id, $name, $privacy = 'private' ) {
        // নতুন wishlist তৈরি
    }

    public function get_user_lists( $user_id ) {
        // ইউজারের সকল wishlist
    }

    public function move_item( $item_id, $from_list, $to_list ) {
        // আইটেম এক লিস্ট থেকে অন্য লিস্টে সরানো
    }
}
```

### ২. সোশ্যাল শেয়ার (Social Sharing)

Wishlist শেয়ার করার সুবিধা — Facebook, Twitter, WhatsApp, Email, এবং কপি লিংক।

```php
namespace BizzwishlistPro\Features;

class SocialShare {

    public function __construct() {
        add_action( 'bizzwishlist_after_table', array( $this, 'render_share_buttons' ) );
    }

    public function render_share_buttons() {
        $share_url = $this->get_share_url();
        // শেয়ার বাটন HTML রেন্ডার
    }

    public function get_share_url() {
        // ইউনিক শেয়ার URL তৈরি
    }

    public function handle_shared_wishlist() {
        // শেয়ার করা wishlist দেখানো
    }
}
```

### ৩. দাম কমার নোটিফিকেশন (Price Drop Alert)

Wishlist এ থাকা প্রোডাক্টের দাম কমলে ইমেইল নোটিফিকেশন।

```php
namespace BizzwishlistPro\Features;

class PriceAlert {

    public function __construct() {
        add_action( 'woocommerce_product_set_price', array( $this, 'check_price_drop' ), 10, 2 );
        add_action( 'bizzwishlist_daily_cron', array( $this, 'send_price_alerts' ) );
    }

    public function check_price_drop( $product, $new_price ) {
        // দাম কমেছে কিনা চেক
    }

    public function send_price_alerts() {
        // ইমেইল পাঠানো
    }
}
```

### ৪. Wishlist Analytics (Admin Dashboard)

অ্যাডমিন ড্যাশবোর্ডে Wishlist analytics দেখানো।

**ফিচারসমূহ:**
- সর্বাধিক wishlisted প্রোডাক্ট
- দিনওয়ারি/মাসওয়ারি wishlist ট্রেন্ড
- Wishlist থেকে কার্টে কনভার্শন রেট
- ইউজারওয়ারি wishlist ডেটা

```php
namespace BizzwishlistPro\Admin;

class Dashboard {

    public function __construct() {
        add_action( 'admin_menu', array( $this, 'add_menu_page' ) );
    }

    public function add_menu_page() {
        add_menu_page(
            'Bizzwishlist Analytics',
            'Wishlist',
            'manage_woocommerce',
            'bizzwishlist-analytics',
            array( $this, 'render_dashboard' ),
            'dashicons-heart'
        );
    }

    public function get_most_wishlisted( $limit = 10 ) {
        global $wpdb;
        // সর্বাধিক wishlisted প্রোডাক্ট কুয়েরি
    }

    public function get_conversion_rate() {
        // Wishlist → Cart কনভার্শন রেট
    }
}
```

### ৫. Email Reminder

নির্দিষ্ট সময় পর পর ইউজারদের wishlist remind করার ইমেইল।

```php
namespace BizzwishlistPro\Features;

class EmailReminder {

    public function __construct() {
        add_action( 'bizzwishlist_weekly_cron', array( $this, 'send_reminders' ) );
    }

    public function send_reminders() {
        // Wishlist এ আইটেম আছে এমন ইউজারদের ইমেইল
    }

    public function get_email_template( $user, $items ) {
        // ইমেইল টেমপ্লেট তৈরি
    }
}
```

### ৬. কাস্টম স্টাইলিং (Custom Styles)

অ্যাডমিন থেকে বাটনের রং, আইকন, পজিশন কাস্টমাইজ করার সুবিধা।

```php
namespace BizzwishlistPro\Features;

class CustomStyles {

    public function __construct() {
        add_action( 'wp_head', array( $this, 'output_custom_css' ) );
        add_action( 'admin_init', array( $this, 'register_settings' ) );
    }

    public function register_settings() {
        // সেটিংস রেজিস্টার
        // - বাটনের রং
        // - আইকন পরিবর্তন
        // - পজিশন (before/after add to cart)
        // - কাউন্টারের স্থান
    }
}
```

### ৭. Gutenberg Block

Wishlist পেজের জন্য Gutenberg block।

```
bizzwishlist-pro/
├── blocks/
│   └── wishlist/
│       ├── block.json
│       ├── edit.js
│       ├── save.js
│       ├── index.js
│       └── style.css
```

---

## ফ্রি ভার্সনে Pro ইন্টিগ্রেশন পয়েন্ট

ফ্রি ভার্সনের কোডে কিছু জায়গায় ফিল্টার/অ্যাকশন হুক যোগ করা যেতে পারে যাতে Pro ভার্সন সহজে ইন্টিগ্রেট করতে পারে:

```php
// Plugin.php এ:
do_action( 'bizzwishlist_loaded', $this );

// WishlistButton.php এ:
$button_html = apply_filters( 'bizzwishlist_button_html', $button_html, $product_id );

// WishlistPage.php এ:
do_action( 'bizzwishlist_before_table', $products );
do_action( 'bizzwishlist_after_table', $products );

// WishlistAjax.php এ:
do_action( 'bizzwishlist_after_add', $product_id, $owner );
do_action( 'bizzwishlist_after_remove', $product_id, $owner );

// Assets.php এ:
$params = apply_filters( 'bizzwishlist_script_params', $params );
```

---

## লাইসেন্স সিস্টেম

### সুপারিশ: EDD (Easy Digital Downloads) Software Licensing

```php
namespace BizzwishlistPro\Admin;

class License {

    const LICENSE_KEY_OPTION = 'bizzwishlist_pro_license_key';
    const LICENSE_STATUS_OPTION = 'bizzwishlist_pro_license_status';

    public function __construct() {
        add_action( 'admin_menu', array( $this, 'add_license_page' ) );
        add_action( 'admin_init', array( $this, 'register_license_settings' ) );
    }

    public function activate_license( $license_key ) {
        // EDD API তে লাইসেন্স অ্যাক্টিভেট
    }

    public function check_license() {
        // লাইসেন্স ভ্যালিড কিনা চেক
    }

    public function is_valid() {
        return get_option( self::LICENSE_STATUS_OPTION ) === 'valid';
    }
}
```

---

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

WordPress.org এর বাইরে প্রিমিয়াম প্লাগিনের জন্য নিজস্ব আপডেট সার্ভার লাগবে।

**অপশনসমূহ:**
1. **EDD Software Licensing** — যদি EDD দিয়ে বিক্রি করেন
2. **WooCommerce API Manager** — WooCommerce দিয়ে বিক্রি করলে
3. **Custom Update Server** — নিজের সার্ভারে

```php
// Plugin update checker ব্যবহার করা যায়:
// YahnisElsts/plugin-update-checker library
```

---

## ডেভেলপমেন্ট টাইমলাইন (প্রস্তাবিত)

| ফেজ | সময়কাল | ফিচার |
|------|---------|--------|
| ফেজ ১ | ২ সপ্তাহ | Multiple Wishlists + Settings Page |
| ফেজ ২ | ১ সপ্তাহ | Social Sharing |
| ফেজ ৩ | ২ সপ্তাহ | Analytics Dashboard |
| ফেজ ৪ | ১ সপ্তাহ | Price Drop Alerts |
| ফেজ ৫ | ১ সপ্তাহ | Email Reminders |
| ফেজ ৬ | ১ সপ্তাহ | Custom Styles + Gutenberg Block |
| ফেজ ৭ | ১ সপ্তাহ | License System + Update Server |
| ফেজ ৮ | ১ সপ্তাহ | টেস্টিং এবং রিলিজ |

**মোট আনুমানিক সময়: ১০ সপ্তাহ**

---

## গুরুত্বপূর্ণ নোট

1. **ফ্রি ভার্সন WordPress.org তে থাকবে** — কোনো প্রিমিয়াম কোড ফ্রি ভার্সনে রাখা যাবে না
2. **Pro প্লাগিন নিজের ওয়েবসাইট/মার্কেটপ্লেস থেকে বিক্রি হবে**
3. **Pro ফিচার লোড হবে শুধু লাইসেন্স ভ্যালিড থাকলে**
4. **ফ্রি ভার্সনে "Pro" ফিচারের advertisement দেওয়া যাবে** (কিন্তু নন-ইনট্রুসিভ হতে হবে)
5. **GPL compliance বজায় রাখতে হবে** — Pro কোডও GPL হতে হবে
