<?php

namespace NoahVet\Reef\Event;

use Symfony\Contracts\EventDispatcher\Event;

abstract class AbstractAuditEvent extends Event implements AuditEventInterface
{
    protected string $action;

    protected string $message;

    protected string $resourceId;

    protected string $resourceType;

    /**
     * @var array<string, string>
     */
    protected array $extraData = [];

    #[\Override]
    abstract public function getAuthenticationType(): string;

    #[\Override]
    abstract public function getEventType(): string;

    #[\Override]
    public function getAction(): string
    {
        return $this->action;
    }

    #[\Override]
    public function getMessage(): string
    {
        return $this->message;
    }

    /**
     * @return array<string, string>
     */
    #[\Override]
    public function getExtraData(): array
    {
        return $this->extraData;
    }

    #[\Override]
    public function getResourceId(): string
    {
        return $this->resourceId;
    }

    #[\Override]
    public function getResourceType(): string
    {
        return $this->resourceType;
    }
}
