<?php

namespace App\Repositories;

use App\Models\Action;
use App\Models\Enums\ActionObjectType;
use App\Models\Enums\ObjectAction;
use App\Models\Project;
use Illuminate\Support\Facades\Auth;

class ActionRepository
{
    public static function create(
        int $objectId,
        ActionObjectType $objectType,
        ObjectAction $action,
        int|null $projectId = null,
        string $comment = null,
        array $extraFields = []
    ): \Illuminate\Database\Eloquent\Model|\Illuminate\Database\Eloquent\Builder
    {
        return Action::query()->create([
            "object_id" => $objectId,
            "object_type" => $objectType->value,
            "action" => $action,
            "project_id" => $projectId,
            "comment" => $comment,
            "extra_fields" => $extraFields ?: null,
            "created_by" => Auth::id(),
        ]);
    }

    public static function createByProject(
        Project $project,
        ObjectAction $action,
        string $comment = null,
        array $extraFields = []
    ): \Illuminate\Database\Eloquent\Model|\Illuminate\Database\Eloquent\Builder
    {
        return self::create(
            $project->id,
            ActionObjectType::PROJECT,
            $action,
            $project->id,
            $comment,
            $extraFields
        );
    }
}