<?php

declare(strict_types=1);

namespace App\Framework\Telemetry\Exporters;

use App\Framework\Telemetry\ValueObjects\Event;
use App\Framework\Telemetry\ValueObjects\Metric;
use App\Framework\Telemetry\ValueObjects\Operation;

/**
 * Interface for telemetry exporters
 */
interface TelemetryExporterInterface
{
    /**
     * Export an operation
     *
     * @param Operation $operation The operation to export
     */
    public function exportOperation(Operation $operation): void;

    /**
     * Export a metric
     *
     * @param Metric $metric The metric to export
     */
    public function exportMetric(Metric $metric): void;

    /**
     * Export an event
     *
     * @param Event $event The event to export
     */
    public function exportEvent(Event $event): void;

    /**
     * Flush any buffered telemetry data
     */
    public function flush(): void;
}
