# -*- coding:utf-8 -*-
# /usr/bin/env python
"""
Date: 2020/10/14 16:52
Desc: 南华期货-商品指数历史走势-收益率指数-波动率
http://www.nanhua.net/nhzc/varietytrend.html
1000 点开始, 用收益率累计
目标地址: http://www.nanhua.net/ianalysis/volatility/20/NHCI.json?t=1574932291399
"""
import time

import requests
import pandas as pd


def num_to_str_data(str_date: int) -> str:
    str_date = str_date / 1000
    str_date = time.localtime(str_date)  # 生成一个元组的时间
    strp_time = time.strftime("%Y-%m-%d %H:%M:%S", str_date)  # 格式化元组
    return strp_time


def get_nh_list_table() -> pd.DataFrame:
    """
    获取南华期货-南华指数所有品种一览表
    :return: pandas.DataFrame
    | id | code  | exchange             | firstday   | category | name           |
    |----|-------|----------------------|------------|----------|----------------|
    | 0  | NHECI | 南华期货             | 2004/6/1   | 板块     | 南华能化指数   |
    | 1  | NHCI  | 南华期货             | 2004/6/1   | 板块     | 南华商品指数   |
    | 2  | NHAI  | 南华期货             | 2004/6/1   | 板块     | 南华农产品指数 |
    | 3  | NHII  | 南华期货             | 2004/6/1   | 板块     | 南华工业品指数 |
    | 4  | NHMI  | 南华期货             | 2004/6/1   | 板块     | 南华金属指数   |
    | 5  | IF    | 南华期货             | 2010/4/16  | 板块     | 南华股指指数   |
    | 6  | NHPMI | 南华期货             | 2012/9/6   | 板块     | 南华贵金属指数 |
    | 7  | A     | 大连商品交易所       | 1994/9/19  | 品种     | 大豆           |
    | 8  | AL    | 上海期货交易所       | 1994/10/12 | 品种     | 铝             |
    | 9  | CU    | 上海期货交易所       | 1996/4/5   | 品种     | 铜             |
    | 10 | RU    | 上海期货交易所       | 1997/4/17  | 品种     | 橡胶           |
    | 11 | M     | 大连商品交易所       | 2000/7/19  | 品种     | 豆粕           |
    | 12 | CF    | 郑州商品交易所       | 2004/6/2   | 品种     | 棉花           |
    | 13 | FU    | 上海期货交易所       | 2004/8/26  | 品种     | 燃油           |
    | 14 | C     | 大连商品交易所       | 2004/9/23  | 品种     | 玉米           |
    | 15 | SR    | 郑州商品交易所       | 2006/1/9   | 品种     | 白糖           |
    | 16 | Y     | 大连商品交易所       | 2006/1/10  | 品种     | 豆油           |
    | 17 | TA    | 郑州商品交易所       | 2006/12/19 | 品种     | PTA            |
    | 18 | ZN    | 上海期货交易所       | 2007/3/26  | 品种     | 锌             |
    | 19 | L     | 大连商品交易所       | 2007/7/31  | 品种     | 塑料           |
    | 20 | P     | 大连商品交易所       | 2007/10/29 | 品种     | 棕榈油         |
    | 21 | AU    | 上海期货交易所       | 2008/1/9   | 品种     | 黄金           |
    | 22 | RB    | 上海期货交易所       | 2009/3/27  | 品种     | 螺纹钢         |
    | 23 | WR    | 上海期货交易所       | 2009/3/27  | 品种     | 线材           |
    | 24 | V     | 大连商品交易所       | 2009/5/25  | 品种     | PVC            |
    | 25 | IF    | 中国金融期货交易所   | 2010/4/16  | 品种     | 股指           |
    | 26 | PB    | 上海期货交易所       | 2011/3/24  | 品种     | 铅             |
    | 27 | J     | 大连商品交易所       | 2011/4/15  | 品种     | 焦炭           |
    | 28 | PM    | 郑州商品交易所       | 2012/1/17  | 品种     | 普麦           |
    | 29 | AG    | 上海期货交易所       | 2012/5/10  | 品种     | 白银           |
    | 30 | OI    | 郑州商品交易所       | 2012/7/16  | 品种     | 菜籽油         |
    | 31 | RI    | 郑州商品交易所       | 2012/7/24  | 品种     | 早籼稻         |
    | 32 | WH    | 郑州商品交易所       | 2012/7/24  | 品种     | 强麦           |
    | 33 | FG    | 郑州商品交易所       | 2012/12/3  | 品种     | 玻璃           |
    | 34 | RS    | 郑州商品交易所       | 2012/12/28 | 品种     | 油菜籽         |
    | 35 | RM    | 郑州商品交易所       | 2012/12/28 | 品种     | 菜籽粕         |
    | 36 | JM    | 大连商品交易所       | 2013/3/22  | 品种     | 焦煤           |
    | 37 | TF    | 中国金融期货交易所   | 2013/9/6   | 品种     | 五年国债       |
    | 38 | BU    | 上海期货交易所       | 2013/10/9  | 品种     | 沥青           |
    | 39 | I     | 大连商品交易所       | 2013/10/18 | 品种     | 铁矿石         |
    | 40 | JD    | 大连商品交易所       | 2013/11/8  | 品种     | 鸡蛋           |
    | 41 | JR    | 郑州商品交易所       | 2013/11/18 | 品种     | 粳稻           |
    | 42 | BB    | 大连商品交易所       | 2013/12/6  | 品种     | 胶合板         |
    | 43 | FB    | 大连商品交易所       | 2013/12/6  | 品种     | 纤维板         |
    | 44 | PP    | 大连商品交易所       | 2014/2/28  | 品种     | 聚丙烯         |
    | 45 | HC    | 上海期货交易所       | 2014/3/21  | 品种     | 热轧卷板       |
    | 46 | LR    | 郑州商品交易所       | 2014/7/8   | 品种     | 晚籼稻         |
    | 47 | SF    | 郑州商品交易所       | 2014/8/8   | 品种     | 硅铁           |
    | 48 | SM    | 郑州商品交易所       | 2014/8/8   | 品种     | 锰硅           |
    | 49 | CS    | 大连商品交易所       | 2014/12/19 | 品种     | 玉米淀粉       |
    | 50 | T     | 中国金融期货交易所   | 2015/3/20  | 品种     | 十年国债       |
    | 51 | NI    | 上海期货交易所       | 2015/3/27  | 品种     | 沪镍           |
    | 52 | SN    | 上海期货交易所       | 2015/3/27  | 品种     | 沪锡           |
    | 53 | MA    | 郑州商品交易所       | 2015/4/10  | 品种     | 甲醇           |
    | 54 | IH    | 中国金融期货交易所   | 2015/4/16  | 品种     | 上证50         |
    | 55 | IC    | 中国金融期货交易所   | 2015/4/16  | 品种     | 中证500        |
    | 56 | ZC    | 郑州商品交易所       | 2015/5/18  | 品种     | 动力煤         |
    | 57 | SC    | 上海国际能源交易中心 | 2017/3/23  | 品种     | 原油           |
    | 58 | CY    | 郑州商品交易所       | 2017/8/18  | 品种     | 棉纱           |
    """
    url_name = "http://www.nanhua.net/ianalysis/plate-variety.json"
    res = requests.get(url_name)
    futures_name = [item["name"] for item in res.json()]
    futures_code = [item["code"] for item in res.json()]
    futures_exchange = [item["exchange"] for item in res.json()]
    futures_first_day = [item["firstday"] for item in res.json()]
    futures_index_cat = [item["indexcategory"] for item in res.json()]
    futures_df = pd.DataFrame(
        [
            futures_code,
            futures_exchange,
            futures_first_day,
            futures_index_cat,
            futures_name,
        ]
    ).T
    futures_df.columns = ["code", "exchange", "start_date", "category", "name"]
    return futures_df


def nh_volatility_index(code: str = "NHCI", day_count: int = 20) -> pd.DataFrame:
    """
    南华期货-南华指数单品种所有历史数据
    :param code: str 通过 get_nh_list 提供
    :param day_count: int [5, 20, 60, 120] 任意一个
    :return: pandas.Series
    """
    if code in get_nh_list_table()["code"].tolist():
        t = time.time()
        base_url = f"http://www.nanhua.net/ianalysis/volatility/{day_count}/{code}.json?t={int(round(t * 1000))}"
        res = requests.get(base_url)
        date = [num_to_str_data(item[0]).split(" ")[0] for item in res.json()]
        data = [item[1] for item in res.json()]
        df_all = pd.DataFrame([date, data]).T
        df_all.columns = ["date", "value"]
        df_all.index = pd.to_datetime(df_all["date"])
        del df_all["date"]
        return df_all


if __name__ == "__main__":
    get_nh_list_table_df = get_nh_list_table()
    print(get_nh_list_table_df)

    nh_volatility_index_df = nh_volatility_index(code="SA", day_count=5)
    print(nh_volatility_index_df)
