<?php

namespace Tests\Feature;

use Illuminate\Foundation\Testing\DatabaseTransactions;
use Tests\Feature\Concerns\BuildsFeatureData;
use Tests\TestCase;

class PublicFeatureRoutesTest extends TestCase
{
    use BuildsFeatureData;
    use DatabaseTransactions;

    public function test_home_route_only_shows_active_jobs(): void
    {
        $activeJob = $this->createJob([
            'title' => 'Backend Engineer Aktif',
            'is_active' => true,
        ]);

        $inactiveJob = $this->createJob([
            'title' => 'Backend Engineer Nonaktif',
            'is_active' => false,
        ]);

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

        $response->assertOk();
        $response->assertSee($activeJob->title);
        $response->assertDontSee($inactiveJob->title);
    }

    public function test_job_detail_route_returns_ok_for_active_job(): void
    {
        $job = $this->createJob([
            'title' => 'QA Engineer Aktif',
            'is_active' => true,
        ]);

        $response = $this->get(route('job.show', $job));

        $response->assertOk();
        $response->assertSee($job->title);
    }

    public function test_job_detail_route_returns_404_for_inactive_job(): void
    {
        $job = $this->createJob([
            'is_active' => false,
        ]);

        $response = $this->get(route('job.show', $job));

        $response->assertNotFound();
    }

    public function test_privacy_and_contact_pages_are_accessible(): void
    {
        $this->get(route('privacy.policy'))->assertOk();
        $this->get(route('contact'))->assertOk();
    }

    public function test_ads_countdown_returns_ok_for_active_job(): void
    {
        $job = $this->createJob([
            'is_active' => true,
        ]);

        $response = $this->get(route('ads.countdown', $job));

        $response->assertOk();
    }

    public function test_ads_countdown_redirects_home_for_inactive_job(): void
    {
        $job = $this->createJob([
            'is_active' => false,
        ]);

        $response = $this->get(route('ads.countdown', $job));

        $response->assertRedirect(route('home'));
        $response->assertSessionHas('error');
    }
}
