import { pasteboard } from '@kit.BasicServicesKit';
import { BusinessError } from '@ohos.base';
import { promptAction } from '@kit.ArkUI';
import { Logger } from './Logger';
import { ToastUtils } from '../dialog/ToastUtils';

export class StringUtils {
  /**
   * 复制纯文本到剪切板
   * @param text 待复制的字符串
   * @param showToast 是否显示成功提示，默认为 true
   */
  static copyText(text: string, showToast: boolean = true): void {
    if (!text) {
      console.warn('ClipboardUtil: Text is empty, skip copying.');
      return;
    }

    try {
      // 1. 创建剪贴板数据对象
      const pasteData: pasteboard.PasteData = pasteboard.createData(pasteboard.MIMETYPE_TEXT_PLAIN, text);
      // 2. 获取系统剪贴板
      const systemPasteboard: pasteboard.SystemPasteboard = pasteboard.getSystemPasteboard();

      // 3. 写入数据 (显式指定 BusinessError 类型消除 any 报错)
      systemPasteboard.setData(pasteData, (err: BusinessError) => {
        if (err) {
          console.error(`ClipboardUtil: Failed to set data. Code: ${err.code}, message: ${err.message}`);
          return;
        }
        if (showToast) {
          ToastUtils.normalToast({message:'已复制到剪切板'});
        }
      });
    } catch (error) {
      // 4. 类型断言消除 catch 中的 any/unknown 报错
      const err: BusinessError = error as BusinessError;
      console.error(`ClipboardUtil: Unexpected error. Code: ${err.code}, message: ${err.message}`);
    }
  }

  /**
   * 检查版本是否符合要求（要求规定三段式：0.0.0）
   * @param v1 基准版本（本地安装的版本号）
   * @param v2 目标版本（服务器要求更新的版本号）
   * @returns true 可用于比较版本号，不可（且无法）用于比较版本号
   */
  static checkVersionLegal(v1: string, v2: string): boolean {
    const v1Parts: string[] = v1.split('.');
    const v2Parts: string[] = v2.split('.');
    if(v1Parts.length === v2Parts.length){
      return true
    }else{
      if(v1Parts.length < 3 || v1Parts.length > 3){
        Logger.info('isNewVersionAvailable', '基准版本：'+v1 +'，版本长度不合规，应该(三段式)为:0.0.0')
      }
      if(v2Parts.length < 3 || v2Parts.length > 3){
        Logger.info('isNewVersionAvailable', '目标版本：'+v2 + '，版本长度不合规，应该(三段式)为:0.0.0')
      }

      return false
    }
  }

  /**
   * 比较版本号
   * @param v1 基准版本 (如 '1.1.0')
   * @param v2 目标版本 (如 '1.0.1')
   * @returns 如果 v2 < v1 返回 true，否则返回 false
   */
  static isNewVersionAvailable(v1: string, v2: string): boolean {
    Logger.info('isNewVersionAvailable', v1 +'----------'+v2)
    // 1. 按点拆分数组
    const v1Parts: string[] = v1.split('.');
    const v2Parts: string[] = v2.split('.');
    // 2. 长度不相等，无法比较
    if(v1Parts.length!=v2Parts.length){
      return false
    }

    // 3. 确定最大比较长度
    const maxLength: number = Math.max(v1Parts.length, v2Parts.length);

    // 4. 版本比较
    for (let i = 0; i < maxLength; i++) {
      // 使用 Number() 或 parseInt，并处理 NaN 的情况
      const n1: number = i < v1Parts.length ? (parseInt(v1Parts[i], 10) || 0) : 0;
      const n2: number = i < v2Parts.length ? (parseInt(v2Parts[i], 10) || 0) : 0;

      Logger.info('isNewVersionAvailable', n1 +'*************'+n2)

      if (n1 < n2) return true;
      if (n1 > n2) return false;
    }

    // 5. 循环结束仍相等
    return false;
  }

}
