<?php

declare(strict_types=1);

use App\Models\ManagedEnvironment;
use App\Models\TenantSetting;
use App\Models\Workspace;
use App\Models\WorkspaceSetting;
use App\Services\Settings\SettingsResolver;
use Illuminate\Foundation\Testing\RefreshDatabase;

uses(RefreshDatabase::class);

it('resolves setting values in tenant -> workspace -> system default order', function (): void {
    $workspace = Workspace::factory()->create();
    $tenant = ManagedEnvironment::factory()->create([
        'workspace_id' => (int) $workspace->getKey(),
    ]);

    $resolver = app(SettingsResolver::class);

    expect($resolver->resolveValue($workspace, 'backup', 'retention_keep_last_default', $tenant))
        ->toBe(30);

    WorkspaceSetting::factory()->create([
        'workspace_id' => (int) $workspace->getKey(),
        'domain' => 'backup',
        'key' => 'retention_keep_last_default',
        'value' => 45,
        'updated_by_user_id' => null,
    ]);

    $resolver->clearCache();

    expect($resolver->resolveValue($workspace, 'backup', 'retention_keep_last_default', $tenant))
        ->toBe(45);

    TenantSetting::factory()->create([
        'workspace_id' => (int) $workspace->getKey(),
        'managed_environment_id' => (int) $tenant->getKey(),
        'domain' => 'backup',
        'key' => 'retention_keep_last_default',
        'value' => 9,
        'updated_by_user_id' => null,
    ]);

    $resolver->clearCache();

    expect($resolver->resolveValue($workspace, 'backup', 'retention_keep_last_default', $tenant))
        ->toBe(9);
});
