<?php

namespace App\Web\Pages\Settings\Projects\Widgets;

use App\Models\Project;
use Filament\Forms\Components\Actions\Action;
use Filament\Forms\Components\Section;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Concerns\InteractsWithForms;
use Filament\Forms\Contracts\HasForms;
use Filament\Notifications\Notification;
use Filament\Widgets\Widget;

class UpdateProject extends Widget implements HasForms
{
    use InteractsWithForms;

    protected static string $view = 'components.form';

    public Project $project;

    public string $name;

    public function mount(Project $project): void
    {
        $this->project = $project;
        $this->name = $project->name;
    }

    public function getFormSchema(): array
    {
        return [
            Section::make()
                ->heading('Project Information')
                ->schema([
                    TextInput::make('name')
                        ->name('name')
                        ->label('Name')
                        ->rules(\App\Actions\Projects\UpdateProject::rules($this->project)['name'])
                        ->placeholder('Enter the project name'),
                ])
                ->footerActions([
                    Action::make('save')
                        ->label('Save')
                        ->action(fn () => $this->submit()),
                ]),
        ];
    }

    public function submit(): void
    {
        $this->authorize('update', $this->project);

        $this->validate();

        app(\App\Actions\Projects\UpdateProject::class)
            ->update($this->project, [
                'name' => $this->name,
            ]);

        Notification::make()
            ->title('Project updated successfully!')
            ->success()
            ->send();
    }
}