<?php

namespace App\Actions\Projects;

use App\Models\Project;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;

class UpdateProject
{
    public function update(Project $project, array $input): Project
    {
        if (isset($input['name'])) {
            $input['name'] = strtolower($input['name']);
        }

        $this->validate($project, $input);

        $project->name = $input['name'];

        $project->save();

        return $project;
    }

    public static function rules(Project $project): array
    {
        return [
            'name' => [
                'required',
                'string',
                'max:255',
                Rule::unique('projects', 'name')->ignore($project->id),
                'lowercase:projects,name',
            ],
        ];
    }

    private function validate(Project $project, array $input): void
    {
        Validator::make($input, self::rules($project))->validate();
    }
}