/*
 * 特别声明：本技术材料受《中华人民共和国著作权法》、《计算机软件保护条例》等法律、法规、行政
 * 规章以及有关国际条约的保护，赞同科技享有知识产权、保留一切权利并视其为技术秘密。未经本公司书
 * 面许可，任何人不得擅自（包括但不限于：以非法的方式复制、传播、展示、镜像、上载、下载）使用，
 * 不得向第三方泄露、透露、披露。否则，本公司将依法追究侵权者的法律责任。特此声明！
 *
 * Special Declaration: These technical material reserved as the technical secrets by AGREE 
 * TECHNOLOGY have been protected by the "Copyright Law" "ordinances on Protection of Computer 
 * Software" and other relevant administrative regulations and international treaties. Without 
 * the written permission of the Company, no person may use (including but not limited to the 
 * illegal copy, distribute, display, image, upload, and download) and disclose the above 
 * technical documents to any third party. Otherwise, any infringer shall afford the legal 
 * liability to the company.
 */
import {Composite} from "widget/Composite";
import {Widget} from "widget/Widget";
import {EChart} from "widget/echart/EChart";

export class PieChart extends EChart {
    private data: Array<DataEntry> = new Array<DataEntry>();
    private dataName: string = "";
    private title: string = "unset";
    private subTitle: string = "";


    setData(args: { data: Array<DataEntry> }) {
        this.data = args.data;
    }

    setDataName(args: { dataName: string }) {
        this.dataName = args.dataName;
    }

    setTitle(args: { titles: { title: string, subTitle: string } }) {
        this.title = args.titles.title;
        this.subTitle = args.titles.subTitle;
    }


    postLayout() {
        if (this.data) {
            this.redrawChart();
        }
        super.postLayout();
    }

    redrawChart() {
        /*-- 从data中解离出name的逻辑 start --*/
        let dataNameList: Array<string> = new Array<string>();
        for (let dataEntry of this.data) {
            dataNameList.push(dataEntry.name);
        }
        /*-- 从data中解离出name的逻辑 end --*/

        /*-- 组件数据list的逻辑 start --*/
        let dataList: Array<any> = new Array<any>();
        for (let dataEntry of this.data) {
            let dataTemplate: any = {
                value: dataEntry.value,
                name: dataEntry.name
            };
            dataList.push(dataTemplate);
        }
        /*-- 组件数据list的逻辑 end --*/


        let pieOption = {
            title: {
                text: this.title,
                subtext: this.subTitle,
                x: "center"
            },
            tooltip: {
                trigger: "item",
                formatter: "{a} <br/>{b} : {c} ({d}%)"
            },
            legend: {
                orient: "vertical",
                left: "left",
                data: dataNameList
            },
            series: [
                {
                    name: this.dataName,
                    type: "pie",
                    radius: "70%",
                    center: ["50%", "50%"],
                    data: dataList,
                    itemStyle: {
                        emphasis: {
                            shadowBlur: 10,
                            shadowOffsetX: 0,
                            shadowColor: "rgba(0, 0, 0, 0.5)"
                        }
                    }
                }
            ]
        };
        this.option = pieOption;
        if (this.echart) {
            this.echart.setOption(this.option);
            this.echart.resize();
        }
    }
}

interface DataEntry {
    name: string;
    value: number;
}