# ডেভেলপার গাইড

## প্লাগিন আর্কিটেকচার

### ফাইল স্ট্রাকচার

```
bizzmudra/
├── admin/
│   ├── class-admin.php          # অ্যাডমিন ইন্টারফেস
│   └── views/
│       └── settings.php         # সেটিংস পেজ টেমপ্লেট
├── assets/
│   └── js/
│       └── public.js            # ফ্রন্টএন্ড JavaScript
├── doc/                         # ডকুমেন্টেশন ফাইল
├── includes/
│   ├── class-currency-data.php  # কারেন্সি ডাটা ম্যানেজমেন্ট
│   ├── class-price-converter.php # প্রাইস কনভার্সন লজিক
│   └── class-widget.php         # কারেন্সি সুইচার উইজেট
├── public/
│   ├── class-public.php         # পাবলিক ফ্রন্টএন্ড হ্যান্ডলার
│   └── class-switcher.php       # সুইচার শর্টকোড
├── bizzmudra.php # মেইন প্লাগিন ফাইল
└── readme.txt                   # WordPress.org রিডমি
```

### ক্লাস স্ট্রাকচার

#### মেইন ক্লাস: `BIZZMUDRA_Loader`
- **Purpose:** প্লাগিন ইনিশিয়ালাইজেশন এবং কম্পোনেন্ট লোডিং
- **Pattern:** Singleton
- **Location:** `bizzmudra.php`

#### ডাটা ক্লাস: `BIZZMUDRA_Currency_Data`
- **Purpose:** কারেন্সি ডাটা স্টোর এবং রিট্রিভ করা
- **Pattern:** Singleton
- **Key Methods:**
  - `get_currencies()` - সব কারেন্সি রিটার্ন করে
  - `get_current_currency()` - বর্তমান নির্বাচিত কারেন্সি
  - `set_current_currency($bizzmudra_currency)` - কারেন্সি সেট করে
  - `get_rate($bizzmudra_currency)` - এক্সচেঞ্জ রেট রিটার্ন করে

#### কনভার্টার ক্লাস: `BIZZMUDRA_Price_Converter`
- **Purpose:** WooCommerce প্রাইস কনভার্ট করা
- **Filters Used:**
  - `woocommerce_product_get_price`
  - `woocommerce_product_get_regular_price`
  - `woocommerce_product_get_sale_price`
  - Variation price filters

#### অ্যাডমিন ক্লাস: `BIZZMUDRA_Admin`
- **Purpose:** অ্যাডমিন প্যানেল ইন্টারফেস
- **Features:** সেটিংস পেজ, কারেন্সি ম্যানেজমেন্ট

#### পাবলিক ক্লাস: `BIZZMUDRA_Public`
- **Purpose:** ফ্রন্টএন্ড ফাংশনালিটি
- **Features:** স্ক্রিপ্ট এনকিউ, কারেন্সি ফিল্টারিং

#### সুইচার ক্লাস: `BIZZMUDRA_Switcher`
- **Purpose:** কারেন্সি সুইচার UI এবং AJAX হ্যান্ডলিং
- **Shortcode:** `[bizzmudra_currency_switcher]`

#### উইজেট ক্লাস: `BIZZMUDRA_Currency_Widget`
- **Purpose:** WordPress উইজেট সাপোর্ট
- **Extends:** `WP_Widget`

## হুক এবং ফিল্টার

### অ্যাকশন হুক

#### `plugins_loaded`
প্লাগিন লোড হওয়ার সময়:
```php
add_action('plugins_loaded', array($this, 'plugins_loaded'));
```

#### `init`
WordPress ইনিশিয়ালাইজেশন:
```php
add_action('init', array($this, 'init'));
```

#### `wp_enqueue_scripts`
ফ্রন্টএন্ড স্ক্রিপ্ট এনকিউ:
```php
add_action('wp_enqueue_scripts', array($this, 'enqueue_scripts'));
```

#### `admin_menu`
অ্যাডমিন মেনু যোগ:
```php
add_action('admin_menu', array($this, 'add_menu'));
```

#### `woocommerce_before_shop_loop`
শপ পেজে সুইচার প্রদর্শন:
```php
add_action('woocommerce_before_shop_loop', array($this, 'display_switcher'));
```

#### `woocommerce_before_single_product`
প্রোডাক্ট পেজে সুইচার প্রদর্শন:
```php
add_action('woocommerce_before_single_product', array($this, 'display_switcher'));
```

### ফিল্টার হুক

#### `woocommerce_currency`
WooCommerce কারেন্সি পরিবর্তন:
```php
add_filter('woocommerce_currency', array($this, 'change_currency'));
```

#### `woocommerce_currency_symbol`
কারেন্সি সিম্বল পরিবর্তন:
```php
add_filter('woocommerce_currency_symbol', array($this, 'change_currency_symbol'), 10, 2);
```

#### প্রাইস কনভার্সন ফিল্টার
```php
add_filter('woocommerce_product_get_price', array($this, 'convert_price'), 99, 2);
add_filter('woocommerce_product_get_regular_price', array($this, 'convert_price'), 99, 2);
add_filter('woocommerce_product_get_sale_price', array($this, 'convert_price'), 99, 2);
```

## কাস্টমাইজেশন

### কাস্টম কারেন্সি যোগ করা

```php
function my_custom_currencies($currencies) {
    $currencies['BDT'] = array(
        'rate' => 110,
        'symbol' => '৳',
        'position' => 'left',
        'decimals' => 2
    );
    return $currencies;
}
add_filter('bizzmudra_currencies', 'my_custom_currencies');
```

### কাস্টম এক্সচেঞ্জ রেট

```php
function my_custom_rate($rate, $bizzmudra_currency) {
    if ($bizzmudra_currency === 'BDT') {
        // API থেকে লাইভ রেট পেতে পারেন
        $rate = 110.5;
    }
    return $rate;
}
add_filter('bizzmudra_exchange_rate', 'my_custom_rate', 10, 2);
```

### সুইচার লোকেশন কাস্টমাইজ

```php
// ডিফল্ট লোকেশন রিমুভ
remove_action('woocommerce_before_shop_loop', array(BIZZMUDRA_Public::get_instance(), 'display_switcher'));

// কাস্টম লোকেশনে যোগ
add_action('my_custom_location', function() {
    echo do_shortcode('[bizzmudra_currency_switcher]');
});
```

### প্রাইস কনভার্সন কাস্টমাইজ

```php
function my_custom_price_conversion($price, $product) {
    // কাস্টম লজিক
    $custom_rate = 1.1;
    return $price * $custom_rate;
}
add_filter('bizzmudra_convert_price', 'my_custom_price_conversion', 10, 2);
```

## AJAX API

### কারেন্সি সুইচ এন্ডপয়েন্ট

**Action:** `bizzmudra_switch_currency`

**Request:**
```javascript
$.ajax({
    url: bizzmudra_ajax.ajax_url,
    type: 'POST',
    data: {
        action: 'bizzmudra_switch_currency',
        nonce: bizzmudra_ajax.nonce,
        currency: 'EUR'
    },
    success: function(response) {
        if (response.success) {
            // সফল
            location.reload();
        }
    }
});
```

**Response:**
```json
{
    "success": true,
    "data": {
        "currency": "EUR"
    }
}
```

## ডাটাবেস স্ট্রাকচার

### অপশন টেবিল

প্লাগিন সেটিংস `wp_options` টেবিলে সংরক্ষিত:

**Option Name:** `bizzmudra_settings`

**Structure:**
```php
array(
    'enabled' => 1,
    'default_currency' => 'USD',
    'currencies' => array(
        'USD' => array(
            'rate' => 1,
            'symbol' => '$',
            'position' => 'left',
            'decimals' => 2
        ),
        'EUR' => array(
            'rate' => 0.85,
            'symbol' => '€',
            'position' => 'left',
            'decimals' => 2
        )
    )
)
```

### কুকি স্টোরেজ

**Cookie Name:** `bizzmudra_currency`
**Expiry:** 30 দিন
**Path:** `/`
**Value:** কারেন্সি কোড (যেমন: 'EUR', 'GBP')

## সিকিউরিটি

### Nonce ভেরিফিকেশন

```php
wp_verify_nonce($_POST['bizzmudra_settings_nonce'], 'bizzmudra_save_settings');
```

### ডাটা স্যানিটাইজেশন

```php
$bizzmudra_currency = sanitize_text_field($_POST['currency']);
$rate = floatval($_POST['rate']);
```

### ক্যাপাবিলিটি চেক

```php
if (!current_user_can('manage_woocommerce')) {
    return;
}
```

## টেস্টিং

### ইউনিট টেস্ট সেটআপ

```bash
# PHPUnit ইনস্টল
composer require --dev phpunit/phpunit

# টেস্ট রান
./vendor/bin/phpunit
```

### ম্যানুয়াল টেস্টিং চেকলিস্ট

- [ ] প্লাগিন ইনস্টলেশন
- [ ] কারেন্সি সেটিংস সেভ
- [ ] শপ পেজে সুইচার প্রদর্শন
- [ ] প্রোডাক্ট পেজে প্রাইস কনভার্সন
- [ ] কার্টে প্রাইস আপডেট
- [ ] চেকআউটে টোটাল কনভার্সন
- [ ] উইজেট ফাংশনালিটি
- [ ] শর্টকোড রেন্ডারিং
- [ ] মোবাইল রেসপন্সিভনেস

## পারফরম্যান্স

### ক্যাশিং

```php
// ট্রানজিয়েন্ট ব্যবহার
$currencies = get_transient('bizzmudra_currencies');
if (false === $currencies) {
    $currencies = $this->get_currencies();
    set_transient('bizzmudra_currencies', $currencies, HOUR_IN_SECONDS);
}
```

### ডাটাবেস কুয়েরি অপটিমাইজেশন

- একবার লোড, মেমোরিতে ক্যাশ
- ট্রানজিয়েন্ট API ব্যবহার
- অপ্রয়োজনীয় কুয়েরি এড়ানো

## ডিবাগিং

### ডিবাগ মোড এনাবল

```php
define('BIZZMUDRA_DEBUG', true);

// লগিং
if (defined('BIZZMUDRA_DEBUG') && BIZZMUDRA_DEBUG) {
    error_log('BMCS: Current currency - ' . $bizzmudra_currency);
}
```

### কমন ইস্যু

1. **প্রাইস কনভার্ট হচ্ছে না**
   - ফিল্টার প্রায়োরিটি চেক করুন
   - WooCommerce সঠিকভাবে লোড হচ্ছে কিনা দেখুন

2. **সুইচার দেখাচ্ছে না**
   - স্ক্রিপ্ট এনকিউ হচ্ছে কিনা চেক করুন
   - jQuery লোড হচ্ছে কিনা দেখুন

3. **AJAX কাজ করছে না**
   - Nonce ভেরিফিকেশন চেক করুন
   - Console error দেখুন

## কন্ট্রিবিউশন

প্লাগিন ওপেন সোর্স। কন্ট্রিবিউট করতে:

1. GitHub রিপোজিটরি ফর্ক করুন
2. নতুন ফিচার ব্র্যাঞ্চ তৈরি করুন
3. কোড লিখুন এবং টেস্ট করুন
4. Pull Request সাবমিট করুন

## লাইসেন্স

GPL v3 বা তার পরবর্তী ভার্সনের অধীনে লাইসেন্সপ্রাপ্ত।
