# Dummy Product Modülü

Test ve geliştirme amaçlı dummy (sahte) ürün modülü. Gerçek API çağrısı yapmaz, sadece test verisi döndürür.

## 📋 Özellikler

- ✅ Server gerektirmez (`requiresServer()` = false)
- ✅ Tüm temel CRUD işlemleri
- ✅ SSO (Single Sign-On) desteği
- ✅ Bağlantı testi
- ✅ Event ve Webhook entegrasyonu
- ✅ Admin ve müşteri panel çıktıları
- ✅ Gerçek API çağrısı yapmadan test yapma imkanı
- ✅ **Her action için admin'e debug mail gönderir** — input `$params` + return value JSON dump

## 📧 Admin Debug Mailleri

Modül, çağrılan her action method'unda (`createAccount`, `suspendAccount`, `unsuspendAccount`, `terminateAccount`, `changeAccountPassword`, `changeAccountPackage`, `createSSOLogin`, `testConnection`, `checkDiskUsage`, `restartService`, `generateBackup`, `handleTest1Action`, `handleTest2Action`) admin mail adresine (`company_email` ayarı) bir bildirim gönderir.

**Mail içeriği:**
- **Input Parameters** — Fonksiyona gelen `$params` (pretty-printed JSON). `ModuleParamsBuilder` üzerinden geldiği için service identity, client, product, server (nested + decrypted), custom_fields, config_options, module_config ve caller extras'ı (yeni şifre, reason, vb.) hepsi tek bir blokta görünür.
- **Return Value** — Fonksiyonun döndürdüğü result array (pretty-printed JSON).

**Template:** `Dummy Product Admin Notification` (TR + EN) — `database/seeders/CommunicationTemplateSeeder.php`'de tanımlı, `{ACTION}`, `{USERNAME}`, `{ACTIONDATE}`, `{DETAILS}` değişkenleri ile.

**Kullanım amacı:** Provisioning flow'unu debug etmek — modülün gerçekte ne aldığını gözle görmek, yeni caller ekleyince veya `ModuleParamsBuilder`'a alan eklerken doğrulama yapmak.

Mail gönderimi `SendEmailJob::dispatch()` ile asenkron — queue worker çalışmıyorsa mailler sıraya girer, gitmez. `company_email` ayarı boşsa sessizce atlanır.

## 🎯 Kullanım Senaryoları

1. **Yeni özellik geliştirme**: API entegrasyonu olmadan provizyon sistemini test etme
2. **Frontend geliştirme**: Backend hazır olmadan UI test etme
3. **Demo ve Sunum**: Gerçek sistem olmadan demo gösterme
4. **Unit Test**: Mock data ile test senaryoları oluşturma
5. **Geliştirme Ortamı**: Gerçek serverlara bağlanmadan çalışma

## 📦 Kurulum

Modül zaten sistemde mevcut. Kullanmak için:

### 1. Admin Panelden Ürün Oluşturma

```
Admin Panel > Ürünler > Yeni Ürün
- Modül: Dummyproduct
- Server Grubu: (Boş bırakılabilir - server gerektirmez)
```

### 2. Modül Yapılandırması

Ürün oluşturduktan sonra modül ayarlarını yapılandırın:

| Alan | Açıklama | Gerekli |
|------|----------|---------|
| Sunucu Adı | Dummy sunucu ismi | Evet |
| Sunucu IP | Dummy IP adresi | Evet |
| Kontrol Panel URL | Dummy panel URL | Evet |
| API Anahtarı | Dummy API key | Hayır |
| SSL Etkin | SSL aktif mi | Hayır |
| Otomatik Kurulum | Otomatik setup | Hayır |

### 3. Müşteri Sipariş Alanları

Sipariş sırasında müşteriden istenen bilgiler:

- Kullanıcı Adı (6-16 karakter)
- Şifre (en az 8 karakter)
- E-posta

## 🔧 Desteklenen İşlemler

### Hesap İşlemleri

```php
// Hesap oluşturma
$module->createAccount([
    'username' => 'testuser',
    'password' => 'SecurePass123',
    'email' => 'test@example.com',
    'domain' => 'test.com',
    'module_config' => [...]
]);

// Hesap askıya alma
$module->suspendAccount([
    'username' => 'testuser',
    'reason' => 'Payment overdue'
]);

// Hesap aktifleştirme
$module->unsuspendAccount([
    'username' => 'testuser'
]);

// Hesap silme
$module->terminateAccount([
    'username' => 'testuser'
]);

// Şifre değiştirme
$module->changeAccountPassword([
    'username' => 'testuser',
    'password' => 'NewSecurePass456'
]);

// Paket değiştirme
$module->changeAccountPackage([
    'username' => 'testuser',
    'plan' => 'premium'
]);
```

### Yardımcı İşlemler

```php
// Bağlantı testi
$result = $module->testConnection([
    'module_config' => [...]
]);

// SSO login oluşturma
$result = $module->createSSOLogin([
    'username' => 'testuser'
]);
```

## 📊 Response Formatı

Tüm işlemler standart response formatı döndürür:

### Başarılı Response
```json
{
    "status": "success",
    "message": "Dummy hesap başarıyla oluşturuldu",
    "data": {
        "account_id": "DUMMY_ABC123XYZ",
        "username": "testuser",
        "email": "test@example.com",
        "domain": "test.com",
        "created_at": "2025-10-21T12:00:00.000000Z",
        "server_name": "Dummy Server",
        "server_ip": "127.0.0.1",
        "control_panel_url": "https://dummy.example.com/login"
    }
}
```

### Hatalı Response
```json
{
    "status": "error",
    "message": "Gerekli parametre eksik: username"
}
```

## 🎨 UI Çıktıları

### Admin Panel
Modül, admin panelinde şu bilgileri gösterir:
- Hesap ID
- Kullanıcı Adı
- Domain
- Ürün Adı
- Fatura Döngüsü
- Sunucu Adı
- Sunucu IP

### Müşteri Panel
Müşteri panelinde şu bilgiler gösterilir:
- Kullanıcı Adı
- Domain
- Kontrol Panel Erişim Butonu
- Bilgilendirme Mesajı (test modülü olduğu)

## 🔔 Event & Webhook

Modül tüm önemli işlemlerde event ve webhook tetikler:

### Events
- `AccountCreated` - Hesap oluşturulduğunda

### Webhooks
- `created` - Hesap oluşturma
- `suspended` - Hesap askıya alma
- `unsuspended` - Hesap aktifleştirme
- `terminated` - Hesap silme
- `password_changed` - Şifre değiştirme
- `package_changed` - Paket değiştirme

## 🧪 Test Örneği

```php
use App\Modules\Product\Dummyproduct\Dummyproduct;

$module = new Dummyproduct([
    'server_name' => 'Test Server',
    'server_ip' => '192.168.1.100',
    'control_panel_url' => 'https://panel.test.com',
    'api_key' => 'dummy-api-key-123',
    'enable_ssl' => true,
    'auto_setup' => true
]);

// Server gerektirip gerektirmediğini kontrol et
$requiresServer = $module->requiresServer(); // false

// Hesap oluştur
$result = $module->createAccount([
    'username' => 'testuser',
    'password' => 'SecurePass123',
    'email' => 'test@example.com',
    'domain' => 'test.com',
    'client_email' => 'client@example.com',
    'product_name' => 'Test Product',
    'billing_cycle' => 'monthly'
]);

// Bağlantı testi
$connectionTest = $module->testConnection();

// SSO oluştur
$sso = $module->createSSOLogin([
    'username' => 'testuser'
]);
```

## 🔍 Özellik Kontrolü

```php
$features = $module->getFeatures();
/*
[
    'create_account' => true,
    'suspend_account' => true,
    'unsuspend_account' => true,
    'terminate_account' => true,
    'change_password' => true,
    'change_package' => true,
    'test_connection' => true,
    'sso_login' => true,
    'requires_server' => false,  // ⭐ Server gerektirmez
    'admin_fields' => true,
    'client_fields' => true,
    'server_fields' => true,
    'admin_output' => true,
    'client_output' => true
]
*/
```

## ⚙️ Yapılandırma Örneği

```php
$config = [
    'server_name' => 'Dummy Production Server',
    'server_ip' => '10.0.0.1',
    'control_panel_url' => 'https://control.example.com',
    'api_key' => 'your-dummy-api-key',
    'enable_ssl' => true,
    'auto_setup' => true
];

$module = new Dummyproduct($config);
```

## 📝 Notlar

- Bu modül **gerçek API çağrısı yapmaz**
- **Test ve geliştirme** amaçlıdır
- Tüm işlemler **başarılı** döner (test amaçlı)
- **Production ortamında** kullanılmamalıdır
- **Server gerektirmez**, dolayısıyla server yapılandırması olmadan çalışır

## 🚀 Yeni Modül Geliştirme Referansı

Yeni bir ürün modülü geliştirirken bu modülü referans alabilirsiniz:

1. `AbstractProduct` sınıfını extend edin
2. `requiresServer()` metodunu implement edin (server gerekiyorsa `true`, gerekmiyorsa `false`)
3. Zorunlu metodları implement edin: `createAccount`, `suspendAccount`, `unsuspendAccount`, `terminateAccount`, `changeAccountPassword`
4. Opsiyonel metodları override edin: `changeAccountPackage`, `testConnection`, `createSSOLogin`
5. Form alanlarını tanımlayın: `adminFields`, `clientFields`, `serverFields`
6. UI çıktılarını oluşturun: `adminOutput`, `clientOutput`
7. `module.json` dosyası oluşturun
8. Logo SVG dosyası ekleyin

## 📄 Lisans

ProCP - Internal Module

