/**
 * NPM包入口文件
 * 展示如何导入和使用CSS/SCSS
 */

// 导入样式文件
import './styles/style.css';
import './styles/style.scss';

/**
 * 简单工具类
 * 这只是一个示例类，开发时请替换为您自己的实现
 */
export class Utils {
  /**
   * 检查一个值是否为空
   * @param value 要检查的值
   * @returns 如果值为null、undefined、空字符串、空数组或空对象则返回true
   */
  static isEmpty(value: any): boolean {
    if (value === null || value === undefined) {
      return true;
    }
    
    if (typeof value === 'string' && value.trim() === '') {
      return true;
    }
    
    if (Array.isArray(value) && value.length === 0) {
      return true;
    }
    
    if (value instanceof Object && Object.keys(value).length === 0) {
      return true;
    }
    
    return false;
  }

  /**
   * 格式化日期
   * @param date 日期对象或时间戳
   * @param format 格式化字符串, 默认为 'YYYY-MM-DD HH:mm:ss'
   * @returns 格式化后的日期字符串
   */
  static formatDate(date: Date | number | string, format: string = 'YYYY-MM-DD HH:mm:ss'): string {
    const d = typeof date === 'object' ? date : new Date(date);
    
    const formatObj: { [key: string]: string } = {
      'Y+': d.getFullYear().toString(),
      'M+': (d.getMonth() + 1).toString(),
      'D+': d.getDate().toString(),
      'H+': d.getHours().toString(),
      'm+': d.getMinutes().toString(),
      's+': d.getSeconds().toString(),
      'q+': Math.floor((d.getMonth() + 3) / 3).toString(),
      'S': d.getMilliseconds().toString()
    };
    
    let result = format;
    
    for (const key in formatObj) {
      if (new RegExp(`(${key})`).test(format)) {
        const value = formatObj[key];
        result = result.replace(RegExp.$1, RegExp.$1.length === 1 ? value : value.padStart(RegExp.$1.length, '0'));
      }
    }
    
    return result;
  }
  
  /**
   * 深拷贝对象
   * @param obj 要拷贝的对象
   * @returns 拷贝后的新对象
   */
  static deepClone<T>(obj: T): T {
    if (obj === null || typeof obj !== 'object') {
      return obj;
    }
    
    if (Array.isArray(obj)) {
      return obj.map(item => this.deepClone(item)) as unknown as T;
    }
    
    const result = {} as T;
    
    for (const key in obj) {
      if (Object.prototype.hasOwnProperty.call(obj, key)) {
        result[key] = this.deepClone(obj[key]);
      }
    }
    
    return result;
  }

  /**
   * 为元素添加样式类
   * 这是一个展示如何使用导入的CSS的示例方法
   * @param element 目标DOM元素
   * @param isScss 是否使用SCSS样式
   */
  static applyStyles(element: HTMLElement, isScss: boolean = false): void {
    if (!element) return;
    
    if (isScss) {
      element.classList.add('scss-example');
    } else {
      element.classList.add('example-class');
    }
  }
}

/**
 * 字符串工具类
 */
export class StringUtils {
  /**
   * 将字符串首字母大写
   * @param str 输入字符串
   * @returns 首字母大写的字符串
   */
  static capitalize(str: string): string {
    if (!str || str.length === 0) return str;
    return str.charAt(0).toUpperCase() + str.slice(1);
  }
  
  /**
   * 计算字符串长度，汉字算2个字符
   * @param str 输入字符串
   * @returns 字符串长度
   */
  static byteLength(str: string): number {
    if (!str) return 0;
    let length = 0;
    for (let i = 0; i < str.length; i++) {
      const charCode = str.charCodeAt(i);
      if (charCode >= 0 && charCode <= 128) {
        length += 1;
      } else {
        length += 2;
      }
    }
    return length;
  }
  
  /**
   * 截取指定长度的字符串，超出部分用省略号替代
   * @param str 输入字符串
   * @param maxLength 最大长度
   * @returns 截取后的字符串
   */
  static truncate(str: string, maxLength: number): string {
    if (!str) return '';
    if (str.length <= maxLength) return str;
    return str.substr(0, maxLength) + '...';
  }
}

/**
 * 这只是一个示例导出
 * 开发时请替换为您自己的实际导出
 */
export default Utils;
