import {
  Large_Canvas_Width
} from 'src/contants'

// 计算旋图形实际尺寸及非中心旋转时的其实坐标
export const getSizeConfig = (width, height, rotateAngle) => {
  // rect
  let w = 0, h = 0
  const containerWidth = Large_Canvas_Width
  const containerHeight = (width && height) ? (height * Large_Canvas_Width) / width : Large_Canvas_Width

  w = containerWidth
  h = containerHeight

  // 180度翻转，只取180度内进行计算
  let curAngle = rotateAngle % 180

  if (curAngle != 0) {
    // 利用90度进行镜像计算
    let computeAngle = curAngle % 90
    if (curAngle < 90) {
      [w, h] = getSizeByAngle(computeAngle, w, h)
    } else {
      [h, w] = getSizeByAngle(computeAngle, w, h)
    }
  }

  return {
    // svg尺寸
    containerWidth,
    containerHeight,
    // svg内元素尺寸
    w,
    h,
  }
}

const getSizeByAngle = (
  rotateAngle,
  containerWidth,
  containerHeight
) => {
  // 实际绘制对象尺寸
  let w, h
  let angle = Math.PI * 2 * (rotateAngle) / 360
  // 以刚好内接为标准计算
  const m = (containerWidth * Math.sin(angle) - containerHeight * Math.cos(angle)) / (Math.pow(Math.sin(angle), 2) - Math.pow(Math.cos(angle), 2))
  // 面积抛物线最大值
  let n = containerHeight / (2 * Math.cos(angle))
  h = n

  if (rotateAngle <= 45) {
    if (m > n) {
      // 左右接
      w = (containerWidth - h * Math.sin(angle)) / Math.cos(angle)
      // x = containerWidth - Math.cos(angle) * w
      // y = (containerHeight - Math.cos(angle) * h - Math.sin(angle) * w) / 2
    } else {
      // 上下接
      w = (containerHeight - h * Math.cos(angle)) / Math.sin(angle)
      // x = (containerWidth + Math.sin(angle) * h - Math.cos(angle) * w) / 2
      // y = 0
    }
  } else {
    if (m > n) {
      w = (containerHeight - h * Math.cos(angle)) / Math.sin(angle)
      // x = (containerWidth - Math.cos(angle) * w + Math.sin(angle) * h) / 2
      // y = 0
    } else {
      w = (containerHeight - n * Math.cos(angle)) / Math.sin(angle)
      h = m
      // x = Math.sin(angle) * h
      // y = (containerHeight - Math.sin(angle) * w - Math.cos(angle) * h) / 2
    }
  }
  return [w, h]
}