<?php
declare(strict_types=1);

namespace App\Service\Rest\Operation;

use JetBrains\PhpStorm\Pure;

/**
 * A single create operation (a POST request)
 */
class CreateOperation extends BaseRestOperation
{
    /**
     * @param string $label A label for the operation
     * @param string $entityName The name of the entity to update. This will be used in the path of the request.
     * @param array<mixed> $data The data to update, will be post as Json within the request.
     * @param array<mixed> $parameters
     * @param array<mixed> $options
     */
    #[Pure]
    public function __construct(
        protected string $label,
        protected string $entityName,
        protected array $data,
        protected array $parameters = [],
        protected array $options = []
    ) {
        $options['json'] = $this->data;

        parent::__construct(
            $label,
            'POST',
            $entityName,
            [],
            $parameters,
            $options
        );
    }

    /**
     * @return string
     */
    public function getEntityName(): string
    {
        return $this->entityName;
    }

    /**
     * @return array<mixed>
     */
    public function getData(): array
    {
        return $this->data;
    }

    /**
     * Return an array of messages describing the change that this operation will bring
     *
     * @return list<string>
     */
    public function getChangeLog(): array
    {
        $messages = [
            '[POST ' . $this->entityName . ']'
        ];
        array_push(
            $messages,
            ...self::getRecursiveChangeLog([], $this->data)
        );
        return $messages;
    }
}
