# আর্কিটেকচার রিফ্যাক্টরিং - সম্পূর্ণ গাইড

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

BizzSwatches প্লাগিনের সম্পূর্ণ ফাইল এবং ফোল্ডার স্ট্রাকচার পরিবর্তন করা হয়েছে। এই আপডেটের মূল উদ্দেশ্য হলো প্লাগিনকে আরও স্কেলেবল, মেইনটেনেবল এবং ডেভেলপার-ফ্রেন্ডলি করা।

> **গুরুত্বপূর্ণ:** `admin/options-framework/` ফোল্ডারে কোনো পরিবর্তন করা হয়নি। এটি আমাদের শেয়ার্ড ফ্রেমওয়ার্ক এবং সকল প্লাগিনে ব্যবহার করা হয়।

---

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

### ১. মেইন এন্ট্রি পয়েন্ট (`bizzswatches.php`)

**আগে:** এই ফাইলে constants, functions (activation, deactivation, WC notice, HPOS), এবং class loading সব একসাথে ছিল।

**এখন:** শুধুমাত্র তিনটি কাজ করে:
- Constants ডিফাইন করে
- Autoloader লোড করে
- `Plugin::register()` কল করে

```php
// মেইন ফাইলের নতুন স্ট্রাকচার
require_once BIZZSWATCHES_PLUGIN_PATH . 'includes/Autoloader.php';
\Bizzswatches\Plugin::register( __FILE__ );
```

### ২. `includes/` ডিরেক্টরি

সমস্ত PHP ক্লাস এখন `includes/` ডিরেক্টরিতে PSR-4 স্টাইলে সাজানো হয়েছে:

```
includes/
├── Plugin.php              ← মেইন অর্কেস্ট্রেটর ক্লাস
├── Autoloader.php          ← PSR-4 অটোলোডার
├── Core/                   ← লাইফসাইকেল ক্লাস
│   ├── Activator.php
│   └── Deactivator.php
├── Helper/                 ← হেল্পার/ইউটিলিটি ক্লাস
│   ├── Utils.php
│   └── AttributeHelper.php
├── Admin/                  ← অ্যাডমিন প্যানেল ক্লাস
│   ├── Admin.php
│   ├── ProductPanel.php
│   ├── AttributeMeta.php
│   ├── GettingStarted.php
│   ├── AdminLoader.php
│   └── FrameworkLoader.php
├── Frontend/               ← ফ্রন্টএন্ড ডিসপ্লে ক্লাস
│   ├── Frontend.php
│   └── SwatchesDisplay.php
└── Services/               ← সার্ভিস লেয়ার
    ├── OptionService.php
    └── AssetService.php
```

### ৩. Plugin.php - কেন্দ্রীয় অর্কেস্ট্রেটর

`includes/Plugin.php` ক্লাস এখন প্লাগিনের সমস্ত কিছু পরিচালনা করে:

| মেথড | কাজ |
|------|------|
| `register()` | Activation, deactivation, admin notices, HPOS হুক রেজিস্টার করে |
| `init()` | WooCommerce চেক করে প্লাগিন ইনিশিয়ালাইজ করে |
| `init_services()` | OptionService এবং AssetService তৈরি করে |
| `init_hooks()` | WordPress হুক রেজিস্টার করে |
| `init_components()` | Admin, Frontend, FrameworkLoader, AdminLoader ইনিশিয়ালাইজ করে |

### ৪. সার্ভিস লেয়ার (নতুন)

দুইটি নতুন সার্ভিস ক্লাস তৈরি করা হয়েছে:

**OptionService** (`includes/Services/OptionService.php`):
- `get($key, $default)` - একটি সেটিং পড়ে
- `all()` - সব সেটিং পড়ে
- `update($key, $value)` - একটি সেটিং আপডেট করে

**AssetService** (`includes/Services/AssetService.php`):
- `url($file)` - অ্যাসেট URL তৈরি করে
- `path($file)` - অ্যাসেট ফাইল পাথ তৈরি করে
- `images_url($file)` - ইমেজ URL তৈরি করে

### ৫. অটোলোডার আপডেট

**আগে:** কাস্টম ম্যাপিং সিস্টেম ব্যবহার করতো (`core` → `includes`, `admin` → `admin`, `public` → `public`)

**এখন:** ক্লিন PSR-4 স্টাইল অটোলোডিং:
```
Bizzswatches\Admin\Admin              → includes/Admin/Admin.php
Bizzswatches\Frontend\Frontend        → includes/Frontend/Frontend.php
Bizzswatches\Helper\Utils             → includes/Helper/Utils.php
Bizzswatches\Helper\AttributeHelper   → includes/Helper/AttributeHelper.php
```

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

| আগের নেমস্পেস | নতুন নেমস্পেস |
|---------------|--------------|
| `Bizzswatches\Core\Bizzswatches` | `Bizzswatches\Plugin` |
| `Bizzswatches\Admin\Product_Panel` | `Bizzswatches\Admin\ProductPanel` |
| `Bizzswatches\Admin\Attribute_Meta` | `Bizzswatches\Admin\AttributeMeta` |
| `Bizzswatches\Admin\Getting_Started` | `Bizzswatches\Admin\GettingStarted` |
| `Bizzswatches\Public_View\Frontend` | `Bizzswatches\Frontend\Frontend` |
| `Bizzswatches\Public_View\Swatches_Display` | `Bizzswatches\Frontend\SwatchesDisplay` |
| `Bizzswatches_Admin_Loader` (নো নেমস্পেস) | `Bizzswatches\Admin\AdminLoader` |
| `Bizzswatches_Framework_Settings` (নো নেমস্পেস) | `Bizzswatches\Admin\FrameworkLoader` |
| `Bizzswatches\Core\Helper` | `Bizzswatches\Helper\Utils` + `Bizzswatches\Helper\AttributeHelper` |

### ৭. Activation/Deactivation আলাদা ক্লাসে

**আগে:** `bizzswatches.php` ফাইলে ফাংশন হিসেবে ছিল

**এখন:** আলাদা ক্লাসে সংগঠিত:
- `includes/Core/Activator.php` - অ্যাক্টিভেশন লজিক
- `includes/Core/Deactivator.php` - ডিঅ্যাক্টিভেশন লজিক

### ৮. টেমপ্লেট ফোল্ডার পরিবর্তন

`admin/html/` → `admin/templates/` - আরও স্পষ্ট নামকরণ

---

## কোন ফাইল মুছে ফেলা হয়েছে

| পুরাতন ফাইল | নতুন লোকেশন |
|------------|-------------|
| `includes/class-bizzswatches-autoloader.php` | `includes/Autoloader.php` |
| `includes/class-bizzswatches.php` | `includes/Plugin.php` |
| `includes/class-bizzswatches-helper.php` | `includes/Helper/Utils.php` + `includes/Helper/AttributeHelper.php` |
| `admin/class-bizzswatches-admin.php` | `includes/Admin/Admin.php` |
| `admin/class-bizzswatches-product-panel.php` | `includes/Admin/ProductPanel.php` |
| `admin/class-bizzswatches-attribute-meta.php` | `includes/Admin/AttributeMeta.php` |
| `admin/class-bizzswatches-getting-started.php` | `includes/Admin/GettingStarted.php` |
| `admin/admin-loader.php` | `includes/Admin/AdminLoader.php` |
| `admin/framework-loader.php` | `includes/Admin/FrameworkLoader.php` |
| `admin/html/getting-started.php` | `admin/templates/getting-started.php` |
| `admin/html/browse-plugin.php` | `admin/templates/browse-plugin.php` |
| `public/class-bizzswatches-frontend.php` | `includes/Frontend/Frontend.php` |
| `public/class-bizzswatches-swatches-display.php` | `includes/Frontend/SwatchesDisplay.php` |

---

## কোন ফাইল নতুন তৈরি হয়েছে

| ফাইল | উদ্দেশ্য |
|------|---------|
| `includes/Plugin.php` | কেন্দ্রীয় অর্কেস্ট্রেটর - সব কিছু এখান থেকে শুরু হয় |
| `includes/Core/Activator.php` | প্লাগিন অ্যাক্টিভেশনে যা হয় |
| `includes/Core/Deactivator.php` | প্লাগিন ডিঅ্যাক্টিভেশনে যা হয় |
| `includes/Helper/Utils.php` | জেনারেল ইউটিলিটি মেথড (কালার কনভার্শন, স্যানিটাইজেশন) |
| `includes/Helper/AttributeHelper.php` | অ্যাট্রিবিউট-সংক্রান্ত হেল্পার মেথড |
| `includes/Services/OptionService.php` | সেটিংস পড়া/লেখার সার্ভিস |
| `includes/Services/AssetService.php` | CSS/JS/Image URL তৈরির সার্ভিস |
| প্রতিটি ফোল্ডারে `README.md` | ফোল্ডারের উদ্দেশ্য এবং ব্যবহার ব্যাখ্যা |
| প্রতিটি ফোল্ডারে `index.php` | ডিরেক্টরি ব্রাউজিং প্রতিরোধ |

---

## কোডের লজিক পরিবর্তন হয়নি

সমস্ত ফিচার আগের মতোই কাজ করে:
- ✅ কালার সোয়াচ
- ✅ ইমেজ সোয়াচ
- ✅ বাটন সোয়াচ
- ✅ রেডিও সোয়াচ
- ✅ টুলটিপ সাপোর্ট
- ✅ আউট অফ স্টক বিহেভিয়র
- ✅ প্রোডাক্ট লেভেল ওভাররাইড
- ✅ সেটিংস পেজ (BizzPlugin Framework)
- ✅ HPOS কম্প্যাটিবিলিটি
- ✅ `bizzswatches()` গ্লোবাল ফাংশন

`bizzswatches()` ফাংশন এখনও কাজ করে এবং একই public API প্রদান করে:
```php
bizzswatches()->get_option('enable_swatches', '1');
bizzswatches()->assets_url('/css/frontend.css');
bizzswatches()->get_frontend();
bizzswatches()->get_admin();
```
