<?php

declare(strict_types=1);

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;

/**
 * Deploy-time validator для supplier_webhook_secret.
 *
 * Spec: docs/superpowers/specs/2026-05-10-supplier-integration-design.md §5.1.
 * Plan 2.6 fix #i: closes CV.11 audit WARN #4 (placeholder seed на production
 * → endpoint silent 404 на ВСЕ запросы из-за verifySecret в SupplierWebhookController).
 *
 * Использование в deploy-script: `php artisan supplier:check-webhook-secret`
 *   exit code 0 = OK, exit code 1 = блокирующая ошибка (deploy не должен продолжаться).
 *
 * Проверки:
 *   1. system_settings row существует с key='supplier_webhook_secret'.
 *   2. value !== '__SET_ON_DEPLOY__' (placeholder из schema seed).
 *   3. strlen(value) >= 32 chars (требование verifySecret в SupplierWebhookController).
 */
class CheckSupplierWebhookSecretCommand extends Command
{
    protected $signature = 'supplier:check-webhook-secret';

    protected $description = 'Deploy-time validator: проверка supplier_webhook_secret seed (Plan 2.6 fix #i)';

    public function handle(): int
    {
        $row = DB::table('system_settings')->where('key', 'supplier_webhook_secret')->first();

        if ($row === null) {
            $this->error('FAIL: system_settings row для key=supplier_webhook_secret не найдена. Schema seed повреждён или БД не мигрирована.');

            return self::FAILURE;
        }

        $value = (string) $row->value;

        if ($value === '__SET_ON_DEPLOY__') {
            $this->error('FAIL: supplier_webhook_secret = "__SET_ON_DEPLOY__" (placeholder из schema seed). Override через UPDATE system_settings перед deploy.');

            return self::FAILURE;
        }

        if (strlen($value) < 32) {
            $this->error('FAIL: supplier_webhook_secret слишком короткий (length='.strlen($value).', нужно >=32 chars для совместимости с verifySecret в SupplierWebhookController).');

            return self::FAILURE;
        }

        $this->info('OK: supplier_webhook_secret valid (length='.strlen($value).' chars, не placeholder).');

        return self::SUCCESS;
    }
}
