<?php

use App\Models\Company;
use App\Models\Transaction;
use App\Models\User;
use Illuminate\Support\Carbon;

test('guests are redirected to the login page', function () {
    $response = $this->get(route('dashboard'));
    $response->assertRedirect(route('login'));
});

test('authenticated users can visit the dashboard', function () {
    $user = User::factory()->create();
    $this->actingAs($user);

    $response = $this->get(route('dashboard'));
    $response->assertStatus(200);
});

test('dashboard displays aggregated transaction insights', function () {
    $this->actingAs(User::factory()->create());

    $acme = Company::factory()->create(['legal_name' => 'Acme Investigations AG']);
    $globex = Company::factory()->create(['legal_name' => 'Globex Surveillance GmbH']);

    Transaction::factory()->for($acme)->requiresReview()->status(Transaction::STATUS_TRUE_POSITIVE)->create([
        'amount' => 123456.78,
        'risk_score' => 92,
        'executed_at' => Carbon::now(),
    ]);

    Transaction::factory()->for($acme)->requiresReview(false)->status(Transaction::STATUS_CLEARED)->create([
        'amount' => 6543.21,
        'risk_score' => 30,
        'executed_at' => Carbon::now()->subDay(),
    ]);

    Transaction::factory()->for($globex)->requiresReview()->status(Transaction::STATUS_FALSE_POSITIVE)->create([
        'amount' => 25000.00,
        'risk_score' => 70,
        'executed_at' => Carbon::now()->subHours(2),
    ]);

    $response = $this->get(route('dashboard'));

    $response->assertOk()
        ->assertSee('Acme Investigations AG')
        ->assertSee('Globex Surveillance GmbH')
        ->assertSee('154.999,99 €')
        ->assertSee('123.456,78 €')
        ->assertSee('Ø Risikoscore 92');
});
