#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
Date: 2025/9/11 13:00
Desc: 东方财富-港股-公司概况
https://emweb.securities.eastmoney.com/PC_HKF10/pages/home/index.html?code=03900&type=web&color=w#/CompanyProfile
"""

import pandas as pd
import requests


def stock_hk_security_profile_em(symbol: str = "03900") -> pd.DataFrame:
    """
    东方财富-港股-证券资料
    https://emweb.securities.eastmoney.com/PC_HKF10/pages/home/index.html?code=03900&type=web&color=w#/CompanyProfile
    :param symbol: 股票代码
    :type symbol: str
    :return: 证券资料
    :rtype: pandas.DataFrame
    """
    url = "https://datacenter.eastmoney.com/securities/api/data/v1/get"
    params = {
        "reportName": "RPT_HKF10_INFO_SECURITYINFO",
        "columns": "SECUCODE,SECURITY_CODE,SECURITY_NAME_ABBR,SECURITY_TYPE,LISTING_DATE,ISIN_CODE,BOARD,"
        "TRADE_UNIT,TRADE_MARKET,GANGGUTONGBIAODISHEN,GANGGUTONGBIAODIHU,PAR_VALUE,"
        "ISSUE_PRICE,ISSUE_NUM,YEAR_SETTLE_DAY",
        "quoteColumns": "",
        "filter": f'(SECUCODE="{symbol}.HK")',
        "pageNumber": "1",
        "pageSize": "200",
        "sortTypes": "",
        "sortColumns": "",
        "source": "F10",
        "client": "PC",
        "v": "04748497219912483",
    }
    r = requests.get(url, params=params)
    data_json = r.json()
    temp_df = pd.DataFrame(data_json["result"]["data"])
    field_mapping = {
        "BOARD": "板块",
        "GANGGUTONGBIAODIHU": "是否沪港通标的",
        "GANGGUTONGBIAODISHEN": "是否深港通标的",
        "ISIN_CODE": "ISIN（国际证券识别编码）",
        "ISSUE_NUM": "发行量(股)",
        "ISSUE_PRICE": "发行价",
        "LISTING_DATE": "上市日期",
        "PAR_VALUE": "每股面值",
        "SECUCODE": "证券代码",
        "SECURITY_NAME_ABBR": "证券简称",
        "SECURITY_TYPE": "证券类型",
        "TRADE_MARKET": "交易所",
        "TRADE_UNIT": "每手股数",
        "YEAR_SETTLE_DAY": "年结日",
    }
    temp_df.rename(columns=field_mapping, inplace=True)
    temp_df = temp_df[
        [
            "证券代码",
            "证券简称",
            "上市日期",
            "证券类型",
            "发行价",
            "发行量(股)",
            "每手股数",
            "每股面值",
            "交易所",
            "板块",
            "年结日",
            "ISIN（国际证券识别编码）",
            "是否沪港通标的",
            "是否深港通标的",
        ]
    ]
    return temp_df


def stock_hk_company_profile_em(symbol: str = "03900") -> pd.DataFrame:
    """
    东方财富-港股-公司资料
    https://emweb.securities.eastmoney.com/PC_HKF10/pages/home/index.html?code=03900&type=web&color=w#/CompanyProfile
    :param symbol: 股票代码
    :type symbol: str
    :return: 公司资料
    :rtype: pandas.DataFrame
    """
    url = "https://datacenter.eastmoney.com/securities/api/data/v1/get"
    params = {
        "reportName": "RPT_HKF10_INFO_ORGPROFILE",
        "columns": "SECUCODE,SECURITY_CODE,ORG_NAME,ORG_EN_ABBR,BELONG_INDUSTRY,FOUND_DATE,CHAIRMAN,"
        "SECRETARY,ACCOUNT_FIRM,REG_ADDRESS,ADDRESS,YEAR_SETTLE_DAY,EMP_NUM,ORG_TEL,ORG_FAX,ORG_EMAIL,"
        "ORG_WEB,ORG_PROFILE,REG_PLACE",
        "quoteColumns": "",
        "filter": f'(SECUCODE="{symbol}.HK")',
        "pageNumber": "1",
        "pageSize": "200",
        "sortTypes": "",
        "sortColumns": "",
        "source": "F10",
        "client": "PC",
        "v": "04748497219912483",
    }
    r = requests.get(url, params=params)
    data_json = r.json()
    temp_df = pd.DataFrame(data_json["result"]["data"])
    field_mapping = {
        "ACCOUNT_FIRM": "核数师",
        "ADDRESS": "办公地址",
        "BELONG_INDUSTRY": "所属行业",
        "CHAIRMAN": "董事长",
        "EMP_NUM": "员工人数",
        "FOUND_DATE": "公司成立日期",
        "ORG_EMAIL": "E-MAIL",
        "ORG_EN_ABBR": "英文名称",
        "ORG_FAX": "传真",
        "ORG_NAME": "公司名称",
        "ORG_PROFILE": "公司介绍",
        "ORG_TEL": "联系电话",
        "ORG_WEB": "公司网址",
        "REG_ADDRESS": "注册地址",
        "REG_PLACE": "注册地",
        "SECRETARY": "公司秘书",
        "SECUCODE": "股票代码",
        "SECURITY_CODE": "证券代码",
        "YEAR_SETTLE_DAY": "年结日",
    }
    temp_df.rename(columns=field_mapping, inplace=True)
    temp_df = temp_df[
        [
            "公司名称",
            "英文名称",
            "注册地",
            "注册地址",
            "公司成立日期",
            "所属行业",
            "董事长",
            "公司秘书",
            "员工人数",
            "办公地址",
            "公司网址",
            "E-MAIL",
            "年结日",
            "联系电话",
            "核数师",
            "传真",
            "公司介绍",
        ]
    ]
    return temp_df


def stock_hk_financial_indicator_em(symbol: str = "03900") -> pd.DataFrame:
    """
    东方财富-港股-核心必读-最新指标
    https://emweb.securities.eastmoney.com/PC_HKF10/pages/home/index.html?code=03900&type=web&color=w#/CoreReading
    :param symbol: 股票代码
    :type symbol: str
    :return: 财务指标
    :rtype: pandas.DataFrame
    """
    url = "https://datacenter.eastmoney.com/securities/api/data/v1/get"
    params = {
        "reportName": "RPT_CUSTOM_HKF10_FN_MAININDICATORMAX",
        "columns": "ORG_CODE,SECUCODE,SECURITY_CODE,SECURITY_NAME_ABBR,SECURITY_INNER_CODE,REPORT_DATE,BASIC_EPS,"
        "PER_NETCASH_OPERATE,BPS,BPS_NEDILUTED,COMMON_ACS,PER_SHARES,ISSUED_COMMON_SHARES,HK_COMMON_SHARES,"
        "TOTAL_MARKET_CAP,HKSK_MARKET_CAP,OPERATE_INCOME,OPERATE_INCOME_SQ,OPERATE_INCOME_QOQ,"
        "OPERATE_INCOME_QOQ_SQ,HOLDER_PROFIT,HOLDER_PROFIT_SQ,HOLDER_PROFIT_QOQ,HOLDER_PROFIT_QOQ_SQ,PE_TTM,"
        "PE_TTM_SQ,PB_TTM,PB_TTM_SQ,NET_PROFIT_RATIO,NET_PROFIT_RATIO_SQ,ROE_AVG,ROE_AVG_SQ,ROA,"
        "ROA_SQ,DIVIDEND_TTM,DIVIDEND_LFY,DIVI_RATIO,DIVIDEND_RATE,IS_CNY_CODE",
        "quoteColumns": "",
        "filter": f'(SECUCODE="{symbol}.HK")',
        "pageNumber": "1",
        "pageSize": "200",
        "sortTypes": "-1",
        "sortColumns": "REPORT_DATE",
        "source": "F10",
        "client": "PC",
        "v": "07945646099062258",
    }
    r = requests.get(url, params=params)
    data_json = r.json()
    temp_df = pd.DataFrame(data_json["result"]["data"])
    field_mapping = {
        "SECURITY_CODE": "股票代码",
        "BASIC_EPS": "基本每股收益(元)",
        "BPS": "每股净资产(元)",
        "COMMON_ACS": "法定股本(股)",
        "PER_SHARES": "每手股",
        "DIVIDEND_TTM": "每股股息TTM(港元)",
        "DIVI_RATIO": "派息比率(%)",
        "ISSUED_COMMON_SHARES": "已发行股本(股)",
        "HK_COMMON_SHARES": "已发行股本-H股(股)",
        "PER_NETCASH_OPERATE": "每股经营现金流(元)",
        "DIVIDEND_RATE": "股息率TTM(%)",
        "TOTAL_MARKET_CAP": "总市值(港元)",
        "HKSK_MARKET_CAP": "港股市值(港元)",
        "OPERATE_INCOME": "营业总收入",
        "OPERATE_INCOME_QOQ": "营业总收入滚动环比增长(%)",
        "NET_PROFIT_RATIO": "销售净利率(%)",
        "HOLDER_PROFIT": "净利润",
        "HOLDER_PROFIT_QOQ": "净利润滚动环比增长(%)",
        "ROE_AVG": "股东权益回报率(%)",
        "PE_TTM": "市盈率",
        "PB_TTM": "市净率",
        "ROA": "总资产回报率(%)",
    }
    temp_df.rename(columns=field_mapping, inplace=True)
    temp_df = temp_df[
        [
            "基本每股收益(元)",
            "每股净资产(元)",
            "法定股本(股)",
            "每手股",
            "每股股息TTM(港元)",
            "派息比率(%)",
            "已发行股本(股)",
            "已发行股本-H股(股)",
            "每股经营现金流(元)",
            "股息率TTM(%)",
            "总市值(港元)",
            "港股市值(港元)",
            "营业总收入",
            "营业总收入滚动环比增长(%)",
            "销售净利率(%)",
            "净利润",
            "净利润滚动环比增长(%)",
            "股东权益回报率(%)",
            "市盈率",
            "市净率",
            "总资产回报率(%)",
        ]
    ]
    return temp_df


def stock_hk_dividend_payout_em(symbol: str = "03900") -> pd.DataFrame:
    """
    东方财富-港股-核心必读-分红派息
    https://emweb.securities.eastmoney.com/PC_HKF10/pages/home/index.html?code=03900&type=web&color=w#/CoreReading
    :param symbol: 股票代码
    :type symbol: str
    :return: 分红派息
    :rtype: pandas.DataFrame
    """
    url = "https://datacenter.eastmoney.com/securities/api/data/v1/get"
    params = {
        "reportName": "RPT_HKF10_MAIN_DIVBASIC",
        "columns": "SECURITY_CODE,UPDATE_DATE,REPORT_TYPE,EX_DIVIDEND_DATE,DIVIDEND_DATE,"
        "TRANSFER_END_DATE,YEAR,PLAN_EXPLAIN,IS_BFP",
        "quoteColumns": "",
        "filter": f'(SECURITY_CODE="{symbol}")(IS_BFP="0")',
        "pageNumber": "1",
        "pageSize": "200",
        "sortTypes": "-1,-1",
        "sortColumns": "NOTICE_DATE,EX_DIVIDEND_DATE",
        "source": "F10",
        "client": "PC",
        "v": "035584639294227527",
    }
    r = requests.get(url, params=params)
    data_json = r.json()

    field_mapping = {
        "SECURITY_CODE": "股票代码",
        "UPDATE_DATE": "最新公告日期",
        "REPORT_TYPE": "分配类型",
        "EX_DIVIDEND_DATE": "除净日",
        "DIVIDEND_DATE": "发放日",
        "TRANSFER_END_DATE": "截至过户日",
        "YEAR": "财政年度",
        "PLAN_EXPLAIN": "分红方案",
        "IS_BFP": "IS_BFP",
    }
    columns = [
        "最新公告日期",
        "财政年度",
        "分红方案",
        "分配类型",
        "除净日",
        "截至过户日",
        "发放日",
    ]

    temp_df = pd.DataFrame(columns=columns)
    if data_json["result"] is not None:
        temp_df = pd.DataFrame(data_json["result"]["data"])
        temp_df.rename(columns=field_mapping, inplace=True)
        temp_df = temp_df[columns]
        temp_df["最新公告日期"] = pd.to_datetime(
            temp_df["最新公告日期"], errors="coerce"
        ).dt.date
        temp_df["除净日"] = pd.to_datetime(temp_df["除净日"], errors="coerce").dt.date
        temp_df["发放日"] = pd.to_datetime(
            temp_df["发放日"], format="%Y/%m/%d", errors="coerce"
        ).dt.date
    return temp_df


if __name__ == "__main__":
    stock_hk_security_profile_em_df = stock_hk_security_profile_em(symbol="03900")
    print(stock_hk_security_profile_em_df)

    stock_hk_company_profile_em_df = stock_hk_company_profile_em(symbol="03900")
    print(stock_hk_company_profile_em_df)

    stock_hk_financial_indicator_em_df = stock_hk_financial_indicator_em(symbol="03900")
    print(stock_hk_financial_indicator_em_df)

    stock_hk_dividend_payout_em_df = stock_hk_dividend_payout_em(symbol="03900")
    print(stock_hk_dividend_payout_em_df)
