<?php

use App\Models\InventoryItem;
use App\Models\InventoryLink;
use App\Models\ManagedEnvironment;
use App\Services\Inventory\DependencyQueryService;
use Illuminate\Support\Str;

it('returns outbound and inbound edges filtered by tenant and direction', function () {
    $tenant = ManagedEnvironment::factory()->create();

    /** @var InventoryItem $item */
    $item = InventoryItem::factory()->create([
        'managed_environment_id' => $tenant->getKey(),
        'external_id' => (string) Str::uuid(),
    ]);

    // Outbound edge for this item
    InventoryLink::factory()->create([
        'managed_environment_id' => $tenant->getKey(),
        'source_type' => 'inventory_item',
        'source_id' => $item->external_id,
        'target_type' => 'foundation_object',
        'target_id' => (string) Str::uuid(),
        'relationship_type' => 'assigned_to',
    ]);

    // Inbound edge pointing to this item as target
    InventoryLink::factory()->create([
        'managed_environment_id' => $tenant->getKey(),
        'source_type' => 'inventory_item',
        'source_id' => (string) Str::uuid(),
        'target_type' => 'inventory_item',
        'target_id' => $item->external_id,
        'relationship_type' => 'depends_on',
    ]);

    $svc = app(DependencyQueryService::class);

    $outbound = $svc->getOutboundEdges($item);
    $inbound = $svc->getInboundEdges($item);

    expect($outbound->count())->toBe(1);
    expect($inbound->count())->toBe(1);
});
