from typing import TYPE_CHECKING
from typing import Union

from src.interface.comment import Comment, Reply
from src.interface.template import APITikTok
from src.translation import _

if TYPE_CHECKING:
    from src.config import Parameter
    from src.testers import Params


class CommentTikTok(Comment, APITikTok):
    def __init__(
        self,
        params: Union["Parameter", "Params"],
        cookie: str = "",
        proxy: str = None,
        detail_id: str = ...,
        pages: int = None,
        cursor=0,
        count=20,
        count_reply=3,
    ):
        super().__init__(
            params, cookie, proxy, detail_id, pages, cursor, count, count_reply
        )
        self.api = f"{self.domain}api/comment/list/"
        self.text = _("作品评论")

    def generate_params(
        self,
    ) -> dict:
        return self.params | {
            "aweme_id": self.item_id,
            "count": self.count,
            "cursor": self.cursor,
            "enter_from": "tiktok_web",
            "is_non_personalized": "false",
            "fromWeb": "1",
            "from_page": "video",
        }


class ReplyTikTok(Reply, CommentTikTok, APITikTok):
    def __init__(
        self,
        params: Union["Parameter", "Params"],
        cookie: str = "",
        proxy: str = None,
        detail_id: str = "",
        comment_id: str = "",
        pages: int = None,
        cursor=0,
        count=3,
        progress=None,
        task_id=None,
    ):
        super().__init__(
            params,
            cookie,
            proxy,
            detail_id,
            comment_id,
            pages,
            cursor,
            count,
            progress,
            task_id,
        )
        self.api = f"{self.domain}api/comment/list/reply/"

    def generate_params(
        self,
    ) -> dict:
        return self.params | {
            "comment_id": self.comment_id,
            "count": self.count,
            "cursor": self.cursor,
            "fromWeb": "1",
            "from_page": "video",
            "item_id": self.item_id,
        }


async def test():
    from src.testers import Params

    async with Params() as params:
        i = CommentTikTok(
            params,
            detail_id="",
        )
        print(await i.run())
        i = ReplyTikTok(
            params,
            detail_id="",
            comment_id="",
        )
        print(await i.run())


if __name__ == "__main__":
    from asyncio import run

    run(test())