from datetime import datetime

from ..expansion import Namespace
from ..translation import _

__all__ = ["Explore"]


class Explore:
    time_format = "%Y-%m-%d_%H:%M:%S"

    def run(self, data: Namespace) -> dict:
        return self.__extract_data(data)

    def __extract_data(self, data: Namespace) -> dict:
        result = {}
        if data:
            self.__extract_interact_info(result, data)
            self.__extract_tags(result, data)
            self.__extract_info(result, data)
            self.__extract_time(result, data)
            self.__extract_user(result, data)
        return result

    @staticmethod
    def __extract_interact_info(container: dict, data: Namespace) -> None:
        container["收藏数量"] = data.safe_extract("interactInfo.collectedCount", "-1")
        container["评论数量"] = data.safe_extract("interactInfo.commentCount", "-1")
        container["分享数量"] = data.safe_extract("interactInfo.shareCount", "-1")
        container["点赞数量"] = data.safe_extract("interactInfo.likedCount", "-1")

    @staticmethod
    def __extract_tags(container: dict, data: Namespace):
        tags = data.safe_extract("tagList", [])
        container["作品标签"] = " ".join(
            Namespace.object_extract(i, "name") for i in tags
        )

    def __extract_info(self, container: dict, data: Namespace):
        container["作品ID"] = data.safe_extract("noteId")
        container["作品链接"] = (
            f"https://www.xiaohongshu.com/explore/{container['作品ID']}"
        )
        container["作品标题"] = data.safe_extract("title")
        container["作品描述"] = data.safe_extract("desc")
        container["作品类型"] = self.__classify_works(data)
        # container["IP归属地"] = data.safe_extract("ipLocation")

    def __extract_time(self, container: dict, data: Namespace):
        container["发布时间"] = (
            datetime.fromtimestamp(time / 1000).strftime(self.time_format)
            if (time := data.safe_extract("time"))
            else _("未知")
        )
        container["最后更新时间"] = (
            datetime.fromtimestamp(last / 1000).strftime(self.time_format)
            if (last := data.safe_extract("lastUpdateTime"))
            else _("未知")
        )
        container["时间戳"] = (
            (time / 1000) if (time := data.safe_extract("time")) else None
        )

    @staticmethod
    def __extract_user(container: dict, data: Namespace):
        container["作者昵称"] = data.safe_extract("user.nickname")
        container["作者ID"] = data.safe_extract("user.userId")
        container["作者链接"] = (
            f"https://www.xiaohongshu.com/user/profile/{container['作者ID']}"
        )

    @staticmethod
    def __classify_works(data: Namespace) -> str:
        type_ = data.safe_extract("type")
        list_ = data.safe_extract("imageList", [])
        if type_ not in {"video", "normal"} or len(list_) == 0:
            return _("未知")
        if type_ == "video":
            return _("视频") if len(list_) == 1 else _("图集")
        return _("图文")
