# Helper ক্লাস রিফ্যাক্টরিং - বিস্তারিত ডকুমেন্টেশন

## সংক্ষিপ্ত বিবরণ

আগে প্লাগিনে একটি মাত্র `Core\Helper` ক্লাস ছিল যেখানে সমস্ত ইউটিলিটি মেথড একসাথে রাখা ছিল। এটি Single Responsibility Principle (SRP) লঙ্ঘন করতো কারণ একটি ক্লাসে কালার কনভার্শন, স্যানিটাইজেশন, অ্যাট্রিবিউট টাইপ কনফিগারেশন — সব একসাথে ছিল।

এখন `Helper` একটি ডেডিকেটেড ফোল্ডারে পরিণত হয়েছে, এবং দুটি আলাদা ক্লাসে ভাগ করা হয়েছে:
- **`Utils`** — জেনারেল-পারপাস ইউটিলিটি মেথড
- **`AttributeHelper`** — অ্যাট্রিবিউট-সংক্রান্ত হেল্পার মেথড

---

## কি পরিবর্তন হয়েছে

### পুরাতন স্ট্রাকচার
```
includes/Core/
├── Helper.php          ← সব মেথড একসাথে
├── Activator.php
└── Deactivator.php
```

### নতুন স্ট্রাকচার
```
includes/Core/
├── Activator.php       ← অপরিবর্তিত
└── Deactivator.php     ← অপরিবর্তিত

includes/Helper/
├── Utils.php           ← জেনারেল ইউটিলিটি
├── AttributeHelper.php ← অ্যাট্রিবিউট হেল্পার
├── README.md
└── index.php
```

---

## নেমস্পেস পরিবর্তন

| আগের নেমস্পেস | নতুন নেমস্পেস |
|---------------|--------------|
| `Bizzswatches\Core\Helper` | `Bizzswatches\Helper\Utils` (জেনারেল মেথড) |
| `Bizzswatches\Core\Helper` | `Bizzswatches\Helper\AttributeHelper` (অ্যাট্রিবিউট মেথড) |

---

## Utils ক্লাস (`includes/Helper/Utils.php`)

এই ক্লাসে সাধারণ ইউটিলিটি মেথড রাখা হয়েছে যেগুলো কোনো নির্দিষ্ট ডোমেইনের সাথে সম্পর্কিত নয়।

### মেথডসমূহ

| মেথড | কাজ | প্যারামিটার | রিটার্ন |
|------|------|------------|---------|
| `rgb_to_hex()` | RGB কালার স্ট্রিংকে HEX-এ কনভার্ট করে | `string $rgb_string` | `string` (HEX কালার) |
| `sanitize_name()` | অ্যাট্রিবিউট নাম স্যানিটাইজ করে | `string $value` | `string` |
| `get_dual_color_gradient_angle()` | ডুয়াল কালারের গ্রেডিয়েন্ট এঙ্গেল রিটার্ন করে | — | `string` (ডিফল্ট: `-45deg`) |
| `is_woocommerce_active()` | WooCommerce অ্যাক্টিভ কিনা চেক করে | — | `bool` |
| `get_template()` | টেমপ্লেট ফাইল ইনক্লুড করে | `string $template_name`, `array $args` | `void` |

### ব্যবহারের উদাহরণ

```php
use Bizzswatches\Helper\Utils;

// RGB থেকে HEX কনভার্ট
$hex = Utils::rgb_to_hex('rgb(255, 0, 0)'); // '#ff0000'

// স্যানিটাইজেশন
$clean = Utils::sanitize_name('My Custom Attribute');

// WooCommerce চেক
if (Utils::is_woocommerce_active()) {
    // কিছু করুন
}

// টেমপ্লেট লোড
Utils::get_template('my-template.php', ['key' => 'value']);
```

---

## AttributeHelper ক্লাস (`includes/Helper/AttributeHelper.php`)

এই ক্লাসে অ্যাট্রিবিউট এবং সোয়াচ-সংক্রান্ত কনফিগারেশন মেথড রাখা হয়েছে।

### মেথডসমূহ

| মেথড | কাজ | প্যারামিটার | রিটার্ন |
|------|------|------------|---------|
| `get_attribute_types()` | সকল অ্যাট্রিবিউট টাইপ রিটার্ন করে | — | `array` |
| `get_swatch_types()` | শুধু সোয়াচ টাইপ রিটার্ন করে (select, radio বাদে) | — | `array` |
| `get_shape_styles()` | সোয়াচ শেপ অপশন রিটার্ন করে | — | `array` |
| `get_attribute_behaviors()` | আউট অফ স্টক বিহেভিয়র অপশন রিটার্ন করে | — | `array` |
| `is_swatch_type()` | কোনো টাইপ সোয়াচ টাইপ কিনা চেক করে | `string $type` | `bool` |

### ব্যবহারের উদাহরণ

```php
use Bizzswatches\Helper\AttributeHelper;

// সকল অ্যাট্রিবিউট টাইপ পাওয়া
$types = AttributeHelper::get_attribute_types();
// ['select' => 'Select', 'color' => 'Color', 'image' => 'Image', ...]

// সোয়াচ টাইপ কিনা চেক
if (AttributeHelper::is_swatch_type('color')) {
    // কালার সোয়াচ
}

// শেপ অপশন
$shapes = AttributeHelper::get_shape_styles();
// ['rounded' => 'Rounded', 'squared' => 'Squared', 'circle' => 'Circle']
```

---

## কোথায় কোথায় আপডেট করা হয়েছে

### `includes/Admin/Admin.php`
```php
// আগে:
use Bizzswatches\Core\Helper;
// Helper::get_attribute_types();

// এখন:
use Bizzswatches\Helper\AttributeHelper;
// AttributeHelper::get_attribute_types();
```

### `includes/Admin/ProductPanel.php`
```php
// আগে:
use Bizzswatches\Core\Helper;
// Helper::get_shape_styles();
// Helper::get_attribute_behaviors();

// এখন:
use Bizzswatches\Helper\AttributeHelper;
// AttributeHelper::get_shape_styles();
// AttributeHelper::get_attribute_behaviors();
```

---

## কেন এই পরিবর্তন করা হয়েছে

### ১. Single Responsibility Principle (SRP)
আগে একটি ক্লাসে কালার কনভার্শন, WooCommerce চেক, অ্যাট্রিবিউট টাইপ — সব একসাথে ছিল। এখন প্রতিটি ক্লাসের একটি নির্দিষ্ট দায়িত্ব আছে।

### ২. স্কেলেবিলিটি
`Helper/` ফোল্ডারে সহজেই নতুন হেল্পার ক্লাস যোগ করা যাবে। যেমন:
- `Helper/ColorHelper.php` — কালার সংক্রান্ত আরও মেথড
- `Helper/ImageHelper.php` — ইমেজ প্রসেসিং
- `Helper/CacheHelper.php` — ক্যাশিং ইউটিলিটি

### ৩. টেস্টেবিলিটি
ছোট, ফোকাসড ক্লাস ইউনিট টেস্ট করা সহজ।

### ৪. কোড অর্গানাইজেশন
ডেভেলপাররা সহজেই বুঝতে পারবে কোন হেল্পার কোথায় আছে এবং কি কাজ করে।

---

## ভবিষ্যতে যা যোগ করা যেতে পারে

```
includes/Helper/
├── Utils.php              ← বর্তমান (জেনারেল ইউটিলিটি)
├── AttributeHelper.php    ← বর্তমান (অ্যাট্রিবিউট হেল্পার)
├── ColorHelper.php        ← ভবিষ্যৎ (কালার প্রসেসিং)
├── ImageHelper.php        ← ভবিষ্যৎ (ইমেজ ম্যানিপুলেশন)
├── CacheHelper.php        ← ভবিষ্যৎ (ক্যাশ ম্যানেজমেন্ট)
└── ValidationHelper.php   ← ভবিষ্যৎ (ইনপুট ভ্যালিডেশন)
```
