<?php

namespace Database\Seeders;

use App\Models\Currency;
use App\Models\Pricing;
use App\Models\Product;
use App\Models\ProductGroup;
use Illuminate\Database\Seeder;

/**
 * PRC-873 — "PROCP License" satılabilir ürünü (SELLER/merkez instance).
 *
 * Merkezi (kendi) PROCP kurulumumuzda PROCP lisansını satmak için ürünü kurar:
 * type=software + module=procp (deferred binding) → satın almada key issue,
 * müşterinin kurulumu ilk phone-home'da domain'e bağlanır (PRC-868).
 *
 * ⚠️ ProductionSeeder'a DAHİL DEĞİL — normal müşteri kurulumunda bu ürün olmaz.
 * Yalnız seller (biz) veya white-label reseller çalıştırır:
 *   sail artisan db:seed --class="Database\Seeders\ProcpLicenseProductSeeder"
 *
 * Idempotent (slug ile updateOrCreate). Fiyatlar varsayılan — admin'den düzenle.
 */
class ProcpLicenseProductSeeder extends Seeder
{
    /** Aylık taban fiyat (yıllık = ×10, 2 ay bedava). */
    private const MONTHLY = ['TRY' => 500, 'USD' => 30, 'EUR' => 28, 'GBP' => 24];

    public function run(): void
    {
        $group = ProductGroup::firstOrCreate(
            ['slug' => 'procp'],
            ['name' => 'PROCP', 'description' => 'PROCP lisans ürünleri', 'icon' => 'fas fa-key', 'hidden' => false, 'order' => 1]
        );

        $product = Product::updateOrCreate(
            ['slug' => 'procp-license'],
            [
                'group_id' => $group->id,
                'type' => 'software',
                'name' => 'PROCP License',
                'description' => 'PROCP hosting kontrol paneli lisansı (self-hosted). Satın alımda lisans anahtarı üretilir; kurulumda girilir.',
                'hidden' => false,
                'status' => 'active',
                'require_domain' => false,
                'module' => 'procp',
                'payment_type' => 'recurring',
                'auto_setup_option' => 'payment',   // ödeme sonrası otomatik key issue
                'upgrades_enabled' => false,
                'affiliate_enabled' => false,
            ]
        );

        $product->setTranslation('name', 'en', 'PROCP License');
        $product->setTranslation('name', 'tr', 'PROCP Lisansı');
        $product->setTranslation('description', 'en', 'PROCP self-hosted hosting control panel license. A license key is issued on purchase and entered during installation.');
        $product->setTranslation('description', 'tr', 'PROCP self-hosted hosting kontrol paneli lisansı. Satın alımda lisans anahtarı üretilir ve kurulumda girilir.');

        // Fiyatlandırma — mevcut currency'ler için aylık + yıllık.
        $currencyIds = Currency::pluck('id', 'code');
        foreach (self::MONTHLY as $code => $monthly) {
            if (! isset($currencyIds[$code])) {
                continue;
            }
            foreach ([1 => $monthly, 12 => $monthly * 10] as $period => $amount) {
                Pricing::updateOrCreate(
                    ['type' => 'product', 'relation_id' => $product->id, 'segment' => 'recurring', 'period' => $period, 'currency_id' => $currencyIds[$code]],
                    ['time' => 'month', 'amount' => $amount, 'order' => $period]
                );
            }
        }

        $this->command?->info("PROCP License ürünü hazır (product #{$product->id}, module=procp). Fiyatları admin'den düzenleyebilirsiniz.");
    }
}
