"""
Base interface for all event payloads (user-provided portion)
"""
from dataclasses import dataclass
from typing import Any, Generic, TypeVar, Optional

T = TypeVar('T')


@dataclass
class EventFile:
    """
    Represents a file to be sent with an event.

    Attributes:
        filePath: The path to the file on disk.
        fieldName: Optional form field name for the file upload.
        filename: Optional filename to use when uploading.
        contentType: Optional MIME content type of the file.
    """
    filePath: str
    fieldName: Optional[str] = None
    filename: Optional[str] = None
    contentType: Optional[str] = None


@dataclass
class AgentEventPayload(Generic[T]):
    """
    Base class for all event payloads (user-provided portion).

    Attributes:
        data: Additional data specific to the event.
    """
    # Additional data specific to the event
    data: Optional[T] = None