class Headers {
    constructor(init = {}) {
      this._headers = {};
  
      if (init instanceof Headers) {
        // 如果传入的是另一个 Headers 实例，复制其内容
        init.forEach((value, name) => {
          this.append(name, value);
        });
      } else if (init) {
        // 处理普通对象或数组
        Object.entries(init).forEach(([name, value]) => {
          if (Array.isArray(value)) {
            // 处理数组值（如 ['value1', 'value2']）
            value.forEach(v => this.append(name, v));
          } else {
            this.set(name, value);
          }
        });
      }
    }
  
    // 添加头（可重复添加同名头）
    append(name, value) {
      const normalizedName = this._normalizeName(name);
      if (this._headers[normalizedName]) {
        this._headers[normalizedName] += `, ${value}`;
      } else {
        this._headers[normalizedName] = String(value);
      }
    }
  
    // 设置头（覆盖同名头）
    set(name, value) {
      this._headers[this._normalizeName(name)] = String(value);
    }
  
    // 获取头
    get(name) {
      return this._headers[this._normalizeName(name)] || null;
    }
  
    // 检查是否存在头
    has(name) {
      return this._normalizeName(name) in this._headers;
    }
  
    // 删除头
    delete(name) {
      delete this._headers[this._normalizeName(name)];
    }
  
    // 遍历头
    forEach(callback) {
      Object.entries(this._headers).forEach(([name, value]) => {
        callback(value, name, this);
      });
    }
  
    // 获取所有头（原始对象）
    raw() {
      return { ...this._headers };
    }
  
    // 规范化头名称（转为小写）
    _normalizeName(name) {
      if (typeof name !== 'string') {
        throw new TypeError('Header name must be a string');
      }
      return name.toLowerCase();
    }
  }
  
  // 全局注册（如果需要）
  if (typeof globalThis.Headers === 'undefined') {
    globalThis.Headers = Headers;
  }
  
  export default Headers;