from typing import Any, Dict, Optional

from pydantic import BaseModel, Field


class BasePayload(BaseModel):
    segmented_data: Dict[str, Any] = Field({})
    meta: Dict[str, Any] = Field({})
    source_name: Optional[str] = "Undefined"

    class Config:
        arbitrary_types_allowed = True


class TextPayload(BasePayload):
    processed_text: str

    def to_dict(self) -> Dict[str, Any]:
        return {
            "processed_text": self.processed_text,
            "segmented_data": self.segmented_data,
            "meta": self.meta,
            "source_name": self.source_name,
        }

    def is_contains_classification_payload(self) -> bool:
        if self.segmented_data:
            if "classifier_data" in self.segmented_data:
                return True
        return False

    class Config:
        arbitrary_types_allowed = True
