from dataclasses import dataclass, field

from astrbot.core.platform.message_type import MessageType


@dataclass
class MessageSession:
    """描述一条消息在 AstrBot 中对应的会话的唯一标识。
    如果您需要实例化 MessageSession，请不要给 platform_id 赋值（或者同时给 platform_name 和 platform_id 赋值相同值）。它会在 __post_init__ 中自动设置为 platform_name 的值。
    """

    platform_name: str
    """平台适配器实例的唯一标识符。自 AstrBot v4.0.0 起，该字段实际为 platform_id。"""
    message_type: MessageType
    session_id: str
    platform_id: str = field(init=False)

    def __str__(self) -> str:
        return f"{self.platform_id}:{self.message_type.value}:{self.session_id}"

    def __post_init__(self):
        self.platform_id = self.platform_name

    @staticmethod
    def from_str(session_str: str):
        platform_id, message_type, session_id = session_str.split(":", 2)
        return MessageSession(platform_id, MessageType(message_type), session_id)


MessageSesion = MessageSession  # back compatibility
