/*
    Copyright (C) 2019 CMCC, Inc. and others. All rights reserved.

    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at

            http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
*/
import { Component, OnInit, Input, Output, EventEmitter, HostBinding } from '@angular/core';
import { HomesService } from '../homes.service';
import { slideToRight } from '../animates';
import { TranslateService } from "@ngx-translate/core";
import { Router } from '@angular/router';

@Component({
  selector: 'app-home',
  templateUrl: './home.component.html',
  styleUrls: ['./home.component.less'],
  animations: [ slideToRight ]
})
export class HomeComponent implements OnInit {
  @HostBinding('@routerAnimate') routerAnimateState;

  constructor(private myhttp: HomesService,private router:Router) { }

  ngOnInit() {
    this.getListSortMasters();
    this.getSourceNames();
    this.getHomeServiceData();
    this.getHomeAlarmData();
    this.getHomeAlarmChartData();
    this.getHomeServiceBarNsData();
    this.getHomeServiceBarVnfData();
    this.getHomeServiceBarPnfData();
  }
  

  // services
  serviceNumber:number = 0;
  serviceChartData:Object;
  serviceChartInit:Object = {
  backgroundColor: '#fff',
    height: 200,
    option:{
      legend: {
        orient: 'vertical',
        left: '0px',
        bottom: '0px',
        data: ['Active','Closed']
      },
      color: ["#7AC0EF", "#6A86D8", "#748CDC", "#7277D4", "#7067CE", "#B9B0F7", "#7DCFF5"],
      series: [
        {
          name: "服务信息",
          radius: ['50%', '70%'],
          center:['50%', '45%'],
          avoidLabelOverlap: false,
          label: {
            normal: {
              show: false,
              position: 'center'
            },
            emphasis: {
              show: true,
              formatter: '{b}\n{c}',
              textStyle: {
                fontSize: '18',
                fontWeight: 'bold'
            }
          }
        },
        labelLine: {
          normal: {
              show: false
            }
          },
          itemStyle: {
            normal: {
              borderWidth: 4,
              borderColor: "#fff"
            },
            emphasis: {
              borderWidth: 0
            }
          },
        }
      ]
    }
  };
  // gethomeServiceData
  serviceChart = true;
  getHomeServiceData(){
    this.myhttp.getHomeServiceData()
    .subscribe(
      (data)=>{
        // console.log(data);
        this.serviceNumber = data.serviceTotalNum;
          if (this.serviceNumber > 0) {
            this.serviceChart = true;
          } else {
            this.serviceChart = false;
          }
        this.serviceChartData = {
          series:[{data:data.customerServiceList}]
        };
        // console.log(this.serviceChartData);
      },
      (err)=>{
        console.log(err);
      }
    )
  }

    // VM alarm
    VMAlarmChartData: Object;
    VMAlarmChartInit: Object = {
        height: 180,
        option: {
            color: [
                {
                    type: 'linear',
                    x: 0,
                    y: 0,
                    x2: 0,
                    y2: 1,
                    colorStops: [{
                        offset: 0, color: '#FB93C2' 
                    }, {
                        offset: 1, color: '#FB7788' 
                    }],
                    globalCoord: false // 
                }, {
                    type: 'linear',
                    x: 0,
                    y: 0,
                    x2: 0,
                    y2: 1,
                    colorStops: [{
                        offset: 0, color: '#A6BFE4' 
                    }, {
                        offset: 1, color: '#7A8BAE' 
                    }],
                    globalCoord: false
                }],
            series: [{
                name: "",
                radius: ['50%', '70%'],
                center: ['50%', '45%'],
                label: {
                    normal: {
                        show: false,
                    },
                    emphasis: {
                        show: true,
                        formatter: '{b}\n{c},{d}%',
                        color: "#3C4F8C"
                    }
                }
            }]
        }
    };

  // alarm bar
  alarmChartData:Object;
  alarmChartInit:Object = {
    height: 180,
    option:{
      legend: {
        orient: 'vertical',
        left: '0px',
        bottom: '0px',
        itemWidth: 10,
        itemHeight: 10,
        textStyle: {
          color: "#3C4F8C"
        },
        data: ['Active', 'Fixed']
      },
      color: [
        {
          type: 'linear',
          x: 0,
          y: 0,
          x2: 0,
          y2: 1,
          colorStops: [{
            offset: 0, color: '#FB93C2'
          }, {
            offset: 1, color: '#FB7788' 
          }],
          globalCoord: false
        }, {
          type: 'linear',
          x: 0,
          y: 0,
          x2: 0,
          y2: 1,
          colorStops: [{
            offset: 0, color: '#A6BFE4'
          }, {
            offset: 1, color: '#7A8BAE'
          }],
          globalCoord: false
        }],
      series: [{
        name: " ",
        radius: '55%',
        center:['50%', '45%'],
        label: {
          normal: {
            show: false,
          },
          emphasis: {
            show: true,
            formatter: '{b}\n{c},{d}%',
            color: "#3C4F8C"
          }
        }
      }]
    }
  };
  getHomeAlarmData(){
    this.myhttp.getHomeAlarmData()
      .subscribe((data)=>{
        this.alarmChartData ={
          series:[{
            data: [{ name: "Active", value: data[0] }, { name: "Fixed", value: data[1] }]
          }]
        };
                this.VMAlarmChartData = {
                    series: [{
                        data: [{name: "Active", value: data[0]}, {name: "Fixed", value: data[1]}]
                    }]
                };
            })
    }

  // alarm line
  alarmLineChartData:Object;
  alarmLineChartInit:Object = {
    height:320,
    option:{
      legend: {
        bottom: '0px',
        data: ['CPU', 'Memory', 'Disk']
      },
      xAxis:{
        data:[]
      },
      series : [
        {
          name: 'CPU',
          type: 'line',
          itemStyle: {
            color: "#70ACEC"
          },
          data: []
        },
        {
          name: 'Memory',
          type: 'line',
          itemStyle: {
            color: "#3BCD79"
          },
          data: []
        },
        {
          name: 'Disk',
          type: 'line',
          itemStyle: {
            color: "#FDC288"
          },
          data: []
        }
      ]
    }
  };
  
   // services 
  servicesBarChartData: Object;
  servicesBarChartData1: Object;
  servicesBarChartData2: Object;
  serviceBarChartInit: Object = {
    height: 40,
    width: 160,
    option: {
      tooltip:{
        
      },
      grid: {
        
      },
      xAxis: {
        type: 'value',
        show: false,
        min: 0,
        max: 100,
        axisTick: {
          show: false
        },
      },
      yAxis: {
        type: 'category',
        show: false,
        axisTick: {
          show: false
        }
      },
      series: [{
        type: 'bar',
        name: 'a',
        silent: true,
        animation: false,
        data: [],
        stack: 'income',
        barWidth: 12,
        itemStyle: {
          normal: {
            // color: {
            //   type: 'bar',
            //   colorStops: [{
            //     offset: 0,
            //     color: '#FDAC63' 
            //   }, {
            //     offset: 1,
            //     color: '#FECE72' 
            //   }],
            //   globalCoord: false,

            // },
            // barBorderRadius: [10, 10, 10, 10]
          }
        },
      }, {
        type: 'bar',
        name: '',
        animation: false,
        silent: true,
        data: [100],
        tooltip: {
          show: false
        },
        stack: 'income',
        barWidth: 12,
        itemStyle: {
          normal: {
            color: '#fff',
            barBorderRadius: [10, 10, 10, 10]
          }
        },
        label: {
          normal: {
            show: false,
          }
        },
      }
      ]
    }
  }


  NSdata: number;
  Vnfdata: number;
  PnfData: number;
  getHomeServiceBarNsData() {
    this.myhttp.getHomeServiceBarNsData()
      .subscribe((data) => {
        this.NSdata = data.length;
        this.servicesBarChartData = {
          series: [
            {
              data: [this.NSdata],
              itemStyle: {
                normal: {
                  color: {
                    type: 'bar',
                    colorStops: [{
                      offset: 0,
                      color: '#FDAC63'
                    }, {
                      offset: 1,
                      color: '#FECE72' 
                    }],
                    globalCoord: false, 
                  },
                  barBorderRadius: [10, 10, 10, 10]
                }
              },
            },
            { data: [100] },

          ]
        }
      }, (err) => {
        console.log(err);
      })
  }

  getHomeServiceBarVnfData() {
    this.myhttp.getHomeServiceBarVnfData()
      .subscribe((data) => {
        this.Vnfdata = data.length;
        this.servicesBarChartData1 = {
          series: [
            {
              data: [this.Vnfdata],
              itemStyle: {
                normal: {
                  color: {
                    type: 'bar',
                    colorStops: [{
                      offset: 0,
                      color: '#9AD09F' 
                    }, {
                      offset: 1,
                      color: '#BCECB8' 
                    }],
                    globalCoord: false, 

                  },
                  barBorderRadius: [10, 10, 10, 10]
                }
              },
            },
            { data: [100] },
          ]
        }
      }, (err) => {
        console.log(err);
      })
  }

  getHomeServiceBarPnfData() {
    this.myhttp.getHomeServiceBarPnfData()
      .subscribe((data) => {
        this.PnfData = data.length;
        this.servicesBarChartData2 = {
          series: [
            { data: [this.PnfData],
              itemStyle: {
                normal: {
                  color: {
                    type: 'bar',
                    colorStops: [{
                      offset: 0,
                      color: '#71ADEF' 
                    }, {
                      offset: 1,
                      color: '#ACCAF4' 
                    }],
                    globalCoord: false, 

                  },
                  barBorderRadius: [10, 10, 10, 10]
                }
              },},
            { data: [100] },
          ]
        }
      }, (err) => {
        console.log(err);
      })
  }
  // sourceName 
  sourceNameList = ['performanceNameOne'];
  sourceNameSelected = null;

  //2019.1.2 add listSortMasters
  listSortMasters=null;

  getListSortMasters(){
      this.myhttp.getListSortMasters()
          .subscribe((data)=>{
              this.listSortMasters = JSON.stringify(data);
        // console.log(this.listSortMasters);
              sessionStorage.setItem('listSortMasters',this.listSortMasters)
          })
  }

  getSourceNames(){
    this.myhttp.getSourceNames()
      .subscribe((data)=>{
        this.sourceNameList = data;
      })
  }
  sourceNameSelect(item){
    if(this.sourceNameSelected != item){
      // console.log(item);
      this.sourceNameSelected = item;
      this.getHomeAlarmChartData()
    } 
  }
  getHomeAlarmChartData(){
    let nowTime = this.myhttp.dateformater( Date.now());
    let startTime = this.myhttp.dateformater( Date.now()-30*24*60*60*1000 );
    let obj = {
      sourceName:this.sourceNameSelected,
      startTime: startTime,
      endTime:nowTime,
      format:"day"
    }
    // console.log(obj);
    this.myhttp.getHomeAlarmChartData(obj)
      .subscribe((data)=>{
        this.alarmLineChartData = {
          xAxis:{
            data:data.dataList
          },
          series:[
            {data:data.allList},
            {data:data.ActiveList},
            {data:data.closedList}
          ]
        }
      },(err)=>{
        console.log(err);
      })
  }

  goback_services(){
    this.router.navigateByUrl('/services/services-list');
  }
  goback_onboard(){
    this.router.navigateByUrl('/services/onboard-vnf-vm');
  }

}