<?php

namespace Tests\Browser\Admin;

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

class MediaManagerTest extends DuskTestCase
{
    use DatabaseMigrations;
    use AuthTrait;

    public function testShouldFailUploadOfUnsupportedFileTypes()
    {
        $this->browse(function (Browser $browser) {

            $this->loginToAdminBackend();

            $browser->click('#navbar_admin')
                ->click('.menu_item_media_manager')
                ->whenAvailable('#media_manager', function ($mediaModal) {
                    $mediaModal->attach('#upload_media_input', 'tests/Browser/resources/csv_for_tests.csv')
                        ->pause(100);
                })
                ->whenAvailable('#alert_modal', function ($modal) {
                    $modal->assertSee('The file type you are trying to upload is not supported.')
                        ->press('OK');
                });
        });
    }

    public function testShouldUploadAndEditValidImageWithSuccess()
    {
        $this->browse(function (Browser $browser) {

            // Session remains within TestCase

            $browser->whenAvailable('#media_manager', function ($mediaModal) {
                    $mediaModal->attach('#upload_media_input', 'tests/Browser/resources/eae_for_tests.png')
                        ->pause(100)
                        ->assertPresent('#media_box_1')
                        ->mouseover('#media_box_1')
                        ->press('.command-edit')
                        ->whenAvailable('.media-form', function ($mediaForm) {
                            $mediaForm->assertPresent('#media_alt_input')
                                ->click('#media_alt_input')
                                ->type('#media_alt_input', 'Alt text for image')
                                ->press('.save-edit-media')
                                ->pause(50)
                                ->press('.close-edit-media')
                                ->pause(50);
                        })
                        ->assertPresent('#media_box_1')
                        ->mouseover('#media_box_1')
                        ->press('.command-edit')
                        ->assertPresent('#media_alt_input')
                        ->assertValue('#media_alt_input', 'Alt text for image')
                        ->click('#media_modal_close');
                });
            $browser->script([
                'document.getElementById("upload_media_input").value = ""',
            ]);
        });
    }

    public function testShouldDeleteImageWithSuccess()
    {
        $this->browse(function (Browser $browser) {

            // Session remains within TestCase

            $browser->click('#navbar_admin')
                ->click('.menu_item_media_manager')
                ->whenAvailable('#media_manager', function ($mediaModal) {
                    $mediaModal->attach('#upload_media_input', 'tests/Browser/resources/eae_for_tests.png')
                        ->pause(100)
                        ->assertPresent('#media_box_1')
                        ->press('#upload_media_tab')
                        ->attach('#upload_media_input', 'tests/Browser/resources/eae_2_for_tests.png')
                        ->pause(100)
                        ->assertPresent('#media_box_1')
                        ->assertPresent('#media_box_2')
                        ->mouseover('#media_box_2')
                        ->press('#media_box_2 .command-edit')
                        ->whenAvailable('.media-form', function ($mediaForm) {
                            $mediaForm->press('.delete-edit-media');
                        });
                })
                ->whenAvailable('#confirm_modal', function ($confirmModal) {
                    $confirmModal->assertSee('Confirm delete')
                        ->press('OK')
                        ->pause(100);
                })
                ->whenAvailable('#media_manager', function ($mediaModal) {
                    $mediaModal->assertPresent('#media_box_1')
                        ->assertNotPresent('#media_box_2')
                        //->screenshot('filename_after_delete')
                        ->click('#media_modal_close');
                });
            $browser->script([
                'document.getElementById("upload_media_input").value = ""',
            ]);
        });
    }

    public function testShouldCropImageWithSuccess()
    {
        $this->browse(function (Browser $browser) {

            // Session remains within TestCase

            $browser->click('#navbar_admin')
                ->click('.menu_item_media_manager')
                ->whenAvailable('#media_manager', function ($mediaModal) {
                    $mediaModal->attach('#upload_media_input', 'tests/Browser/resources/eae_2_for_tests.png')
                        ->pause(100)
                        //->screenshot('filename_pre_crop')
                        ->assertPresent('#media_box_1')
                        ->assertNotPresent('#media_box_2')
                        ->mouseover('#media_box_1')
                        ->press('.command-crop')
                        ->whenAvailable('.image-cropper', function ($mediaForm) {
                            $mediaForm->press('.done-crop')
                                ->pause(100);
                        })
                        ->assertPresent('#media_box_2')
                        ->mouseover('#media_box_2')
                        ->press('.command-edit')
                        ->whenAvailable('.media-form', function ($mediaForm) {
                            $mediaForm->assertSee('211x114')
                                ->press('.close-edit-media')
                                ->pause(50);
                        })
                        ->click('#media_modal_close');
                });
        });
    }
}
