<?php

namespace Tests\Feature\MediaFolder;

use App\Models\Backoffice\Auth\BackendUser;
use App\Models\Backoffice\MediaFolder;
use App\Models\Backoffice\MediaItem;
use Tests\TestCase;
use Illuminate\Support\Facades\Storage;

class DeleteFolderTest extends TestCase
{
    public function testItThrowsExceptionWhenDeletingFolderWithMediaItems()
    {
        Storage::fake('media');
        Storage::disk('media')->makeDirectory('test');
        Storage::disk('media')->put('test/file.jpg', 'fake content');

        $user = BackendUser::first();

        $folder = MediaFolder::create([
            'base_folder' => 'media',
            'path' => 'test',
            'name' => 'test',
            'parent_id' => null,
        ]);

        MediaItem::create([
            'base_folder' => 'media',
            'path' => 'test/file.jpg',
            'filename' => 'file.jpg',
            'original_filename' => 'original_file.jpg',
            'title' => 'title',
            'extension' => 'jpg',
            'related_type' => null,
            'media_type' => 'image',
            'backend_user_id' => $user->id,
            'media_folder_id' => $folder->id,
            'size' => 1024,
            'width' => 800,
            'height' => 600,
        ]);

        $response = $this->actingAsAdmin()->deleteJson("/admin/media/folders/{$folder->id}", [
            'base_folder' => 'default',
        ]);

        $response->assertStatus(500)
            ->assertJson([
                'error' => "Cannot delete folder 'test' because it contains media items",
            ]);
    }

    public function testItDeletesFolder()
    {
        Storage::fake('media');
        Storage::disk('media')->makeDirectory('test');

        $folder = MediaFolder::create([
            'base_folder' => 'media',
            'path' => 'test',
            'name' => 'test',
            'parent_id' => null,
        ]);

        $response = $this->actingAsAdmin()->deleteJson("/admin/media/folders/{$folder->id}", [
            'base_folder' => 'default',
        ]);

        $response->assertStatus(200);
        $this->assertTrue($response->json());

        $this->assertDatabaseMissing('media_folders', [
            'id' => $folder->id,
        ]);

        Storage::disk('media')->assertMissing('test');
    }
}
