/**
 * zrender
 *
 * @author Kener (@Kener-林峰, kener.linfeng@gmail.com)
 *
 * shape类：仪表盘指针
 * 可配图形属性：
   {
       // 基础属性
       shape  : 'gauge-pointer',       // 必须，shape类标识，需要显式指定
       id     : {string},       // 必须，图形唯一标识，可通过'zrender/tool/guid'方法生成
       zlevel : {number},       // 默认为0，z层level，决定绘画在哪层canvas中
       invisible : {boolean},   // 默认为false，是否可见

       // 样式属性，默认状态样式样式属性
       style  : {
           xStart        : {number},  // 必须，起点横坐标
           yStart        : {number},  // 必须，起点纵坐标
           xEnd          : {number},  // 必须，终点横坐标
           yEnd          : {number},  // 必须，终点纵坐标
           strokeColor   : {color},   // 默认为'#000'，线条颜色（轮廓），支持rgba
           lineWidth     : {number},  // 线条宽度
       },

       // 交互属性，详见shape.Base

       // 事件属性，详见shape.Base
   }
 */
module.exports = function (require) {
  var Base = require('zrender/shape/Base');

  var zrUtil = require('zrender/tool/util');

  function GaugePointer(options) {
    Base.call(this, options);
  }

  GaugePointer.prototype = {
    type: 'gauge-pointer',

    /**
     * 创建矩形路径
     * @param {Context2D} ctx Canvas 2D上下文
     * @param {Object} style 样式
     */
    buildPath: function (ctx, style) {
      var r = style.r;
      var width = style.width;
      var angle = style.angle;
      var x = style.x - Math.cos(angle) * width * (width >= r / 3 ? 1 : 2);
      var y = style.y + Math.sin(angle) * width * (width >= r / 3 ? 1 : 2);
      angle = style.angle - Math.PI / 2;
      ctx.moveTo(x, y);
      ctx.lineTo(style.x + Math.cos(angle) * width, style.y - Math.sin(angle) * width);
      ctx.lineTo(style.x + Math.cos(style.angle) * r, style.y - Math.sin(style.angle) * r);
      ctx.lineTo(style.x - Math.cos(angle) * width, style.y + Math.sin(angle) * width);
      ctx.lineTo(x, y);
      return;
    },

    /**
     * 返回矩形区域，用于局部刷新和文字定位
     * @param {Object} style
     */
    getRect: function (style) {
      if (style.__rect) {
        return style.__rect;
      }

      var width = style.width * 2;
      var xStart = style.x;
      var yStart = style.y;
      var xEnd = xStart + Math.cos(style.angle) * style.r;
      var yEnd = yStart - Math.sin(style.angle) * style.r;
      style.__rect = {
        x: Math.min(xStart, xEnd) - width,
        y: Math.min(yStart, yEnd) - width,
        width: Math.abs(xStart - xEnd) + width,
        height: Math.abs(yStart - yEnd) + width
      };
      return style.__rect;
    },
    isCover: require('./normalIsCover')
  };
  zrUtil.inherits(GaugePointer, Base);
  return GaugePointer;
}(require);