#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
Date: 2025/10/17 16:30
Desc: 郑州商品交易所-交易数据-历史行情下载-期权历史行情下载
http://www.czce.com.cn/cn/jysj/lshqxz/H770319index_1.htm
自 20200101 起，成交量、空盘量、成交额、行权量均为单边计算
郑州商品交易所-期权上市时间表
"SR": "20170419"
"CF": "20190410"
"TA": "20191216"
"MA": "20191217"
"RM": "20200116"
"ZC": "20200630"
"OI": "20220826"
"PK": "20220826"
"PX": "20230915"
"SH": "20230915"
"SA": "20231020"
"PF": "20231020"
"SM": "20231020"
"SF": "20231020"
"UR": "20231020"
"AP": "20231020"
"CJ": "20240621"
"FG": "20240621"
"PR": "20241227"
"""

import warnings
from io import StringIO

import pandas as pd
import requests


def option_hist_yearly_czce(symbol: str = "SR", year: str = "2021") -> pd.DataFrame:
    """
    郑州商品交易所-交易数据-历史行情下载-期权历史行情下载
    http://www.czce.com.cn/cn/jysj/lshqxz/H770319index_1.htm
    :param symbol: choice of {"白糖": "SR", "棉花": "CF", "PTA": "TA", "甲醇": "MA", "菜籽粕": "RM",
    "动力煤": "ZC", "菜籽油": "OI", "花生": "PK", "对二甲苯": "PX", "烧碱": "SH", "纯碱": "SA", "短纤": "PF",
    "锰硅": "SM", "硅铁": "SF", "尿素": "UR", "苹果": "AP", "红枣": "CJ", "玻璃": "FG", "瓶片": "PR"}
    :type symbol: str
    :param year: 需要获取数据的年份, 注意品种的上市时间
    :type year: str
    :return: 指定年份的日频期权数据
    :rtype: pandas.DataFrame
    """
    symbol_year_dict = {
        "SR": "2017",
        "CF": "2019",
        "TA": "2019",
        "MA": "2019",
        "RM": "2020",
        "ZC": "2020",
        "OI": "2022",
        "PK": "2022",
        "PX": "2023",
        "SH": "2023",
        "SA": "2023",
        "PF": "2023",
        "SM": "2023",
        "SF": "2023",
        "UR": "2023",
        "AP": "2023",
        "CJ": "2024",
        "FG": "2024",
        "PR": "2024",
    }
    if int(symbol_year_dict[symbol]) > int(year):
        warnings.warn(f"{year} year, symbol {symbol} is not on trade")
        return pd.DataFrame()
    url = f"http://www.czce.com.cn/cn/DFSStaticFiles/Option/{year}/OptionDataAllHistory/{symbol}OPTIONS{year}.txt"
    r = requests.get(url)
    option_df = pd.read_table(StringIO(r.text), skiprows=1, sep="|", low_memory=False)
    return option_df


if __name__ == "__main__":
    option_hist_yearly_czce_df = option_hist_yearly_czce(symbol="RM", year="2025")
    print(option_hist_yearly_czce_df)
