<?php

namespace App\Http\Livewire\Databases;

use App\Models\Backup;
use App\Models\BackupFile;
use App\Models\Database;
use App\Models\Server;
use App\Traits\HasCustomPaginationView;
use App\Traits\RefreshComponentOnBroadcast;
use Illuminate\Contracts\View\View;
use Livewire\Component;

class DatabaseBackupFiles extends Component
{
    use HasCustomPaginationView;
    use RefreshComponentOnBroadcast;

    public Server $server;

    public Backup $backup;

    public string $restoreId = '';

    public string $restoreDatabaseId = '';

    public int $deleteId;

    public function backup(): void
    {
        $this->backup->run();

        $this->refreshComponent([]);
    }

    public function restore(): void
    {
        /** @var BackupFile $file */
        $file = BackupFile::query()->findOrFail($this->restoreId);

        /** @var Database $database */
        $database = Database::query()->findOrFail($this->restoreDatabaseId);

        $file->restore($database);

        $this->refreshComponent([]);

        $this->dispatchBrowserEvent('restored', true);
    }

    public function delete(): void
    {
        /** @var BackupFile $file */
        $file = BackupFile::query()->findOrFail($this->deleteId);

        $file->delete();

        $this->dispatchBrowserEvent('confirmed', true);
    }

    public function render(): View
    {
        return view('livewire.databases.database-backup-files', [
            'files' => $this->backup->files()->orderByDesc('id')->simplePaginate(10),
        ]);
    }
}