from dataclasses import dataclass, field
from datetime import datetime
from typing import Any


@dataclass
class PipelineContext:

    pipeline_id: str

    realtor_id: int

    version: str = "v2"

    current_stage: str = ""

    started_at: datetime = field(default_factory=datetime.now)

    data: dict[str, Any] = field(default_factory=dict)

    metrics: dict[str, Any] = field(default_factory=dict)

    logs: list[str] = field(default_factory=list)

    def log(self, message: str):

        self.logs.append(message)

    def put(self, key: str, value: Any):

        self.data[key] = value

    def get(self, key: str, default=None):

        return self.data.get(key, default)