from typing import TYPE_CHECKING, Callable, Type, Coroutine
from typing import Union

from src.interface.template import API
from src.translation import _

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


class User(API):
    def __init__(
        self,
        params: Union["Parameter", "Params"],
        cookie: str = "",
        proxy: str = None,
        sec_user_id: str = ...,
        *args,
        **kwargs,
    ):
        super().__init__(params, cookie, proxy, *args, **kwargs)
        self.sec_user_id = sec_user_id
        self.api = f"{self.domain}aweme/v1/web/user/profile/other/"
        self.text = _("账号")

    async def run(self, *args, **kwargs):
        return await super().run(
            single_page=True,
            data_key="user",
        )

    async def run_batch(
        self,
        data_key: str,
        error_text="",
        cursor="cursor",
        has_more="has_more",
        params: Callable = lambda: {},
        data: Callable = lambda: {},
        method="GET",
        headers: dict = None,
        callback: Type[Coroutine] = None,
        *args,
        **kwargs,
    ):
        pass

    def check_response(
        self,
        data_dict: dict,
        data_key: str,
        error_text="",
        *args,
        **kwargs,
    ):
        try:
            if not (d := data_dict[data_key]):
                self.log.warning(error_text)
            else:
                self.response = d
        except KeyError:
            self.log.error(
                _("数据解析失败,请告知作者处理: {data}").format(data=data_dict)
            )
            self.finished = True

    def generate_params(
        self,
    ) -> dict:
        return self.params | {
            "publish_video_strategy_type": "2",
            "sec_user_id": self.sec_user_id,
            "personal_center_strategy": "1",
            "profile_other_record_enable": "1",
            "land_to": "1",
            "version_code": "170400",
            "version_name": "17.4.0",
        }


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

    async with Params() as params:
        i = User(
            params,
            sec_user_id="",
        )
        print(await i.run())


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

    run(test())