<?php

namespace Tests\Browser;

use Illuminate\Foundation\Testing\DatabaseMigrations;
use Laravel\Dusk\Browser;
use Tests\DuskTestCase;

use App\Models\Page;
use App\Models\Blog;

class SearchTest extends DuskTestCase
{
    public function test_a_page_can_be_searched_for()
    {
        $this->browse(function ($browser) {
            $page = Page::factory()->create();
            $page->publish();
            $page->refresh();

            $this->assertNotNull($page->version->title);
            $this->assertNotNull($page->full_slug);

            $browser->visit('/search')
                ->assertPathIs('/search')
                ->assertDontSee('Page Not Found')
                //->click('@search-toggle')
                ->waitFor('@global-search')
                ->with('@global-search', function ($browser) use ($page) {
                    $browser->type('@search-input', $page->name)
                        ->pause(500)
                        ->waitFor('@search-result-page-'.$page->id)
                        ->with('@search-result-page-'.$page->id, function ($browser) use ($page) {
                            $browser->assertSee($page->version->title)
                                ->assertSourceHas($page->full_slug)
                                ->clickLink($page->version->title);
                        });
                })
                ->waitForLocation('/'.$page->full_slug);
        });
    }

    public function test_search_results_can_be_filtered()
    {
        $this->browse(function ($browser) {
            $page = Page::factory()->create();
            $page->publish();
            $page->refresh();
            $name = $page->version->name;

            $blog = Blog::factory()->create();
            $version = $blog->versions()->first();
            $version->name = $name;
            $version->save();
            $blog->publish();
            $blog->refresh();

            $this->assertEquals($page->name, $blog->name);

            $browser->visit('/search')
                ->waitFor('@global-search')
                ->with('@global-search', function ($browser) use ($page, $blog) {
                    $browser->type('@search-input', $page->name)
                        ->pause(500)
                        ->waitFor('@search-result-page-'.$page->id)
                        ->assertMissing('@search-result-blog-'.$blog->id)
                        ->click('@checkbox-blogs')
                        ->waitFor('@search-result-blog-'.$blog->id)
                        ->click('@checkbox-pages')
                        ->pause(1000)
                        ->assertMissing('@search-result-page-'.$page->id)
                        ->click('@checkbox-blogs')
                        ->pause(1000)
                        ->click('@checkbox-livestreams');
                    //->waitFor('@search-result-page-'.$page->id)
                    //->waitFor('@search-result-blog-'.$blog->id);
                });
        });
    }
}
