<?php

namespace Tests\Feature;

use App\Models\User;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Illuminate\Support\Facades\Hash;
use Tests\Feature\Concerns\BuildsFeatureData;
use Tests\TestCase;

class AdminAuthFeatureTest extends TestCase
{
    use BuildsFeatureData;
    use DatabaseTransactions;

    public function test_admin_login_page_is_accessible(): void
    {
        $this->get(route('admin.login'))->assertOk();
    }

    public function test_admin_can_login_and_redirect_to_dashboard(): void
    {
        $admin = $this->createAdminUser([
            'name' => 'superadmin',
            'password' => Hash::make('admin-secret'),
        ]);

        $response = $this->post(route('admin.login.submit'), [
            'username' => 'superadmin',
            'password' => 'admin-secret',
        ]);

        $response->assertRedirect(route('admin.dashboard'));
        $this->assertAuthenticatedAs($admin);
    }

    public function test_non_admin_user_cannot_login_to_admin_area(): void
    {
        $user = User::factory()->create([
            'name' => 'regularuser',
            'password' => Hash::make('user-secret'),
        ]);
        $user->forceFill(['is_admin' => false])->save();

        $response = $this->from(route('admin.login'))->post(route('admin.login.submit'), [
            'username' => 'regularuser',
            'password' => 'user-secret',
        ]);

        $response->assertRedirect(route('admin.login'));
        $response->assertSessionHasErrors('username');
        $this->assertGuest();
    }

    public function test_admin_can_logout(): void
    {
        $admin = $this->createAdminUser();
        $this->actingAs($admin);

        $response = $this->post(route('admin.logout'));

        $response->assertRedirect(route('admin.login'));
        $this->assertGuest();
    }

    public function test_dashboard_hides_copy_feature_and_directs_to_jobs_page(): void
    {
        $admin = $this->createAdminUser();
        $this->actingAs($admin);

        $this->createJob([
            'title' => 'Backend Engineer Dashboard',
            'company' => 'PT Dashboard',
        ]);

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

        $response->assertOk();
        $response->assertDontSee('Copy Lowongan Cepat');
        $response->assertDontSee('Duplikasi lowongan dengan perusahaan berbeda tanpa input ulang dari nol.');
        $response->assertDontSee('Copy');
        $response->assertDontSee('id="dashboard-copy-job-modal"', false);
        $response->assertDontSee('Nama perusahaan baru');
        $response->assertSee('Lowongan Terbaru');
        $response->assertSee('Lihat semua lowongan');
    }
}
