#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
Date: 2025/9/14 18:00
Desc: 基金经理大全
https://fund.eastmoney.com/manager/default.html
"""

import pandas as pd
import requests

from akshare.utils import demjson
from akshare.utils.tqdm import get_tqdm


def fund_manager_em() -> pd.DataFrame:
    """
    天天基金网-基金数据-基金经理大全
    https://fund.eastmoney.com/manager/default.html
    :return: 基金经理大全
    :rtype: pandas.DataFrame
    """
    big_df = pd.DataFrame()
    url = "https://fund.eastmoney.com/Data/FundDataPortfolio_Interface.aspx"
    params = {
        "dt": "14",
        "mc": "returnjson",
        "ft": "all",
        "pn": "500",
        "pi": "1",
        "sc": "abbname",
        "st": "asc",
    }
    r = requests.get(url, params=params)
    data_text = r.text
    data_json = demjson.decode(data_text.strip("var returnjson= "))
    total_page = data_json["pages"]
    tqdm = get_tqdm()
    for page in tqdm(range(1, total_page + 1), leave=False):
        params.update(
            {
                "pi": page,
            }
        )
        r = requests.get(url, params=params)
        data_text = r.text
        data_json = demjson.decode(data_text.strip("var returnjson= "))
        temp_df = pd.DataFrame(data_json["data"])
        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
    big_df.reset_index(inplace=True)
    big_df["index"] = range(1, len(big_df) + 1)
    big_df.columns = [
        "序号",
        "_",
        "姓名",
        "_",
        "所属公司",
        "现任基金代码",
        "现任基金",
        "累计从业时间",
        "现任基金最佳回报",
        "_",
        "_",
        "现任基金资产总规模",
        "_",
    ]
    big_df = big_df[
        [
            "序号",
            "姓名",
            "所属公司",
            "现任基金代码",
            "现任基金",
            "累计从业时间",
            "现任基金资产总规模",
            "现任基金最佳回报",
        ]
    ]
    big_df["现任基金最佳回报"] = (
        big_df["现任基金最佳回报"].str.split("%", expand=True).iloc[:, 0]
    )
    big_df["现任基金资产总规模"] = (
        big_df["现任基金资产总规模"].str.split("亿元", expand=True).iloc[:, 0]
    )
    big_df["累计从业时间"] = pd.to_numeric(big_df["累计从业时间"], errors="coerce")
    big_df["现任基金最佳回报"] = pd.to_numeric(
        big_df["现任基金最佳回报"], errors="coerce"
    )
    big_df["现任基金资产总规模"] = pd.to_numeric(
        big_df["现任基金资产总规模"], errors="coerce"
    )
    big_df["现任基金代码"] = big_df["现任基金代码"].apply(lambda x: x.split(","))
    big_df["现任基金"] = big_df["现任基金"].apply(lambda x: x.split(","))
    big_df = big_df.explode(column=["现任基金代码", "现任基金"])
    big_df.reset_index(drop=True, inplace=True)
    return big_df


if __name__ == "__main__":
    fund_manager_em_df = fund_manager_em()
    print(fund_manager_em_df)
