# -*- encoding: utf-8 -*-
# -----------------------------------------------------------------------------
# @File Name  : radar_chart.py
# @Time       : 2020/12/1 下午4:50
# @Author     : X. Peng
# @Email      : acepengxiong@163.com
# @Software   : PyCharm
# -----------------------------------------------------------------------------
import base64
import os
import time
from io import BytesIO

import imgkit

import pyecharts.options as opts
from pyecharts.charts import Radar
import cv2
import numpy as np


def gen_radar_chart(radar_chart_data):
    """
    Gallery 使用 pyecharts 1.1.0
    参考地址: https://echarts.apache.org/examples/editor.html?c=radar
    目前无法实现的功能:
    1、雷达图周围的图例的 textStyle 暂时无法设置背景颜色
    """
    radar_chart = radar_chart_data['data'][0:5]
    v1 = [[data['data'] for data in radar_chart]]
    radar = Radar(
            init_opts=opts.InitOpts(bg_color="#fff", animation_opts=opts.AnimationOpts(animation=False))).add_schema(
            schema=[
                opts.RadarIndicatorItem(name="绝对收益", max_=100),
                opts.RadarIndicatorItem(name="基金经理", max_=100),
                opts.RadarIndicatorItem(name="极端风险", max_=100),
                opts.RadarIndicatorItem(name="风险调整后收益", max_=100),
                opts.RadarIndicatorItem(name="业绩持续性", max_=100),
            ],
            # schema=[
            #     opts.RadarIndicatorItem(name=data['name'], max_=float(data['data'])) for data in radar_chart
            # ],
            splitarea_opt=opts.SplitAreaOpts(
                is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1, color=[
                    'rgba(194, 194, 194, 0.5)',
                    'rgba(232, 232, 232, 1)',
                    'rgba(242, 242, 242, 1)',
                    'rgba(247, 247, 247, 0.92)',
                    'rgba(247, 247, 247, 0.5)',

                ])
            ),
            textstyle_opts=opts.TextStyleOpts(color="#000", font_size=14),
        ).add(
            series_name="预算分配(Allocated Budget)",
            data=v1,
            linestyle_opts=opts.LineStyleOpts(width=2, color="#999999"),
            tooltip_opts=None
        ).set_series_opts(label_opts=opts.LabelOpts(is_show=False)).set_global_opts(
            # title_opts=opts.TitleOpts(
            #     title="综合评分", subtitle=radar_chart_data['data'][5]['data'], pos_top="center", pos_left="46%",
            #     title_textstyle_opts={'color': '#333',
            #                           'fontSize': 18,
            #                           'lineHeight': 20,
            #                           'fontWeight': 'normal'
            #                           },
            #     subtitle_textstyle_opts={'color': '#983612' if float(radar_chart_data['data'][5]['data']) > 60 else '#22999F',
            #                              'fontSize': 20,
            #                              'lineHeight': 23,
            #                              'fontWeight': 'bolder',
            #                              }),
            legend_opts=opts.LegendOpts(selected_mode=False, is_show=False)
        )

    # radar.render("basic_radar_chart.html")
    # img_content = work_dir + "/app/html/{}.png".format(str(uuid.uuid4()))
    # make_snapshot(snapshot, "basic_radar_chart.html", img_content, delay=2)

    html = radar.render_embed()
    start = time.time()
    image_bin = imgkit.from_string(html, None)
    print('propose_fund cost', time.time() - start)
    # 读取图片
    img1 = np.frombuffer(image_bin, np.uint8)
    img = cv2.imdecode(img1, cv2.IMREAD_ANYCOLOR)
    # 获取宽度和高度
    height = len(img)
    width = len(img[0])

    img = img[0:height, 160:750]
    img_bin = cv2.imencode(".png", img)[1].tobytes()
    img_content = 'data:image/png;base64,' + base64.b64encode(img_bin).decode('utf-8')
    return img_content


if __name__ == '__main__':
    gen_radar_chart()