<?php

declare(strict_types=1);

namespace Tests\Concerns;

use Illuminate\Support\Facades\DB;

/**
 * Share PDO between pgsql и pgsql_supplier connections в тестах.
 *
 * Зачем: Laravel DatabaseTransactions trait оборачивает каждый connection в
 * свою транзакцию. Записи через default Project::factory() ($pgsql) не видны
 * с pgsql_supplier connection до commit'а. Sharing PDO означает — обе
 * connection'ы используют ту же PDO session → одну транзакцию.
 *
 * На production обе connection'ы реальные separate PDO, и видимость
 * обеспечивается READ COMMITTED после commit'а webhook-handler'а перед
 * dispatch'ом supplier-flow job'а. Этот trait — только для test-окружения.
 *
 * Использование: `uses(SharesSupplierPdo::class)` в Pest test-файле, где
 * нужна cross-connection visibility (например, tests/Feature/Supplier/*).
 */
trait SharesSupplierPdo
{
    protected function setUpSharesSupplierPdo(): void
    {
        if (! config()->has('database.connections.pgsql_supplier')) {
            return;
        }

        $defaultConnection = DB::connection('pgsql');
        DB::connection('pgsql_supplier')->setPdo($defaultConnection->getPdo());
        DB::connection('pgsql_supplier')->setReadPdo($defaultConnection->getReadPdo());
    }
}
