// 定义 RGB 类型，包括 r, g, b 和可选的 a（透明度）分量

// 辅助函数：将 16 进制颜色转换为 RGB
var hexToRgb = function hexToRgb(hex) {
  hex = hex.replace(/^#/, ''); // 去掉开头的 #
  if (hex.length === 3) {
    // 处理三位颜色码，扩展为六位颜色码
    hex = hex.split('').map(function (h) {
      return h + h;
    }).join('');
  }
  var intVal = parseInt(hex, 16); // 将 16 进制转换为整数
  return {
    r: intVal >> 16 & 255,
    // 提取红色分量
    g: intVal >> 8 & 255,
    // 提取绿色分量
    b: intVal & 255 // 提取蓝色分量
  };
};

// 辅助函数：将 RGB 转换为 16 进制颜色
var rgbToHex = function rgbToHex(r, g, b) {
  return '#' + [r, g, b].map(function (x) {
    var hex = x.toString(16); // 将数值转换为 16 进制字符串
    return hex.length === 1 ? '0' + hex : hex; // 确保每个分量都是两位
  }).join(''); // 将 RGB 分量组合为 16 进制颜色码
};

// 辅助函数：解析输入的颜色字符串，并返回 RGB 或 RGBA 对象
var parseColor = function parseColor(color) {
  if (color.startsWith('#')) {
    return hexToRgb(color); // 处理 16 进制颜色
  } else if (color.startsWith('rgb')) {
    // 处理 RGB 或 RGBA 颜色
    var rgba = color.replace(/rgba?\(|\s+|\)/g, '').split(',').map(Number);
    return {
      r: rgba[0],
      g: rgba[1],
      b: rgba[2],
      a: rgba[3] !== undefined ? rgba[3] : 1
    };
  } else {
    throw new Error('无效的颜色格式');
  }
};

// 生成颜色阶梯的函数
export var generateColorShades = function generateColorShades(color) {
  var _parseColor = parseColor(color),
    r = _parseColor.r,
    g = _parseColor.g,
    b = _parseColor.b,
    a = _parseColor.a;
  var max = 700;
  var gap = 1 / max;

  // 定义相对于 700 阶梯的 50, 200, 500 阶梯的比例
  var ratios = {
    50: gap * 50,
    200: gap * 200,
    500: gap * 500,
    600: gap * 600,
    700: gap * 700
  };

  // 调整颜色分量的函数，基于比例计算新的分量值
  var adjustColorComponent = function adjustColorComponent(component, ratio) {
    return Math.round(component * ratio + 255 * (1 - ratio));
  };

  // 生成不同阶梯的颜色
  var shades = {
    'color_50': rgbToHex(adjustColorComponent(r, ratios[50]), adjustColorComponent(g, ratios[50]), adjustColorComponent(b, ratios[50])),
    'color_200': rgbToHex(adjustColorComponent(r, ratios[200]), adjustColorComponent(g, ratios[200]), adjustColorComponent(b, ratios[200])),
    'color_500': rgbToHex(adjustColorComponent(r, ratios[500]), adjustColorComponent(g, ratios[500]), adjustColorComponent(b, ratios[500])),
    'color_600': rgbToHex(adjustColorComponent(r, ratios[600]), adjustColorComponent(g, ratios[600]), adjustColorComponent(b, ratios[600])),
    'color_700': color
  };

  // 如果原始颜色带有透明度 (RGBA)，在返回结果中包含透明度信息
  if (a !== undefined) {
    shades['color_50'] = "rgba(".concat(adjustColorComponent(r, ratios[50]), ", ").concat(adjustColorComponent(g, ratios[50]), ", ").concat(adjustColorComponent(b, ratios[50]), ", ").concat(a, ")");
    shades['color_200'] = "rgba(".concat(adjustColorComponent(r, ratios[200]), ", ").concat(adjustColorComponent(g, ratios[200]), ", ").concat(adjustColorComponent(b, ratios[200]), ", ").concat(a, ")");
    shades['color_500'] = "rgba(".concat(adjustColorComponent(r, ratios[500]), ", ").concat(adjustColorComponent(g, ratios[500]), ", ").concat(adjustColorComponent(b, ratios[500]), ", ").concat(a, ")");
    shades['color_600'] = "rgba(".concat(adjustColorComponent(r, ratios[600]), ", ").concat(adjustColorComponent(g, ratios[600]), ", ").concat(adjustColorComponent(b, ratios[600]), ", ").concat(a, ")");
  }
  return shades;
};