import Taro from '@tarojs/taro';

// 判断是否是微信环境
export const isWeapp = Taro.getEnv() === 'WEAPP';

// 判断是否是H5环境
export const isH5 = Taro.getEnv() === 'WEB';

/**
 * 兼容性处理：获取账号信息
 * 在微信小程序中使用 Taro.getAccountInfoSync
 * 在H5中返回空对象或默认值
 */
export function getAccountInfoSync() {
  if (isWeapp) {
    return Taro.getAccountInfoSync();
  } else {
    return {
      miniProgram: {
        appId: '',
        version: '',
        envVersion: 'develop'
      }
    };
  }
}

/**
 * 兼容性处理：登录功能
 * 在微信小程序中使用 Taro.login
 * 在H5中需要使用其他方式处理
 */
export function login(options: Taro.login.Option) {
  if (isWeapp) {
    return Taro.login(options);
  } else {
    // H5环境下提供一个默认实现或者空实现
    console.warn('Taro.login is not supported in H5 environment');
    return Promise.resolve({
      code: '',
      errMsg: 'not supported in h5'
    });
  }
}

/**
 * 兼容性处理：设置导航栏颜色
 * 在微信小程序中使用 Taro.setNavigationBarColor
 * 在H5中不执行任何操作
 */
export function setNavigationBarColor(options: Taro.setNavigationBarColor.Option) {
  if (isWeapp) {
    return Taro.setNavigationBarColor(options);
  } else {
    // H5环境下不执行任何操作
    console.warn('Taro.setNavigationBarColor is not supported in H5 environment');
    return Promise.resolve({
      errMsg: 'not supported in h5'
    });
  }
}

/**
 * 兼容性处理：显示加载提示
 * 在微信小程序中使用 Taro.showLoading
 * 在H5中使用 console.log 模拟
 */
export function showLoading(options: Taro.showLoading.Option) {
  if (isWeapp) {
    return Taro.showLoading(options);
  } else {
    // H5环境下使用console.log模拟
    console.log('Loading:', options.title);
    return Promise.resolve({
      errMsg: 'used console.log instead in h5'
    });
  }
}

/**
 * 兼容性处理：隐藏加载提示
 * 在微信小程序中使用 Taro.hideLoading
 * 在H5中使用 console.log 模拟
 */
export function hideLoading() {
  if (isWeapp) {
    return Taro.hideLoading();
  } else {
    // H5环境下使用console.log模拟
    console.log('Loading hidden');
    return Promise.resolve({
      errMsg: 'used console.log instead in h5'
    });
  }
}

/**
 * 兼容性处理：显示提示信息
 * 在微信小程序中使用 Taro.showToast
 * 在H5中使用 alert 或 console.log 模拟
 */
export function showToast(options: Taro.showToast.Option) {
  if (isWeapp) {
    return Taro.showToast(options);
  } else {
    // H5环境下使用alert或console.log模拟
    console.log(`Toast: ${options.title}`);
    // 如果需要更真实的模拟，可以使用alert
    // alert(options.title);
    return Promise.resolve({
      errMsg: 'used console.log instead in h5'
    });
  }
}

/**
 * 兼容性处理：显示模态框
 * 在微信小程序中使用 Taro.showModal
 * 在H5中使用 confirm 模拟
 */
export function showModal(options: Taro.showModal.Option) {
  if (isWeapp) {
    return Taro.showModal(options);
  } else {
    // H5环境下使用confirm模拟
    const result = confirm(`${options.title}\n${options.content}`);
    return Promise.resolve({
      confirm: result,
      cancel: !result,
      errMsg: 'used confirm instead in h5'
    });
  }
}

/**
 * 兼容性处理：发起支付
 * 在微信小程序中使用 Taro.requestPayment
 * 在H5中不执行任何操作
 */
export function requestPayment(options: Taro.requestPayment.Option) {
  if (isWeapp) {
    return Taro.requestPayment(options);
  } else {
    // H5环境下不执行任何操作
    console.warn('Taro.requestPayment is not supported in H5 environment');
    return Promise.reject({
      errMsg: 'not supported in h5'
    });
  }
}

/**
 * 兼容性处理：剪贴板功能
 * 在微信小程序中使用 Taro.setClipboardData
 * 在H5中使用 navigator.clipboard
 */
export function setClipboardData(options: Taro.setClipboardData.Option) {
  if (isWeapp) {
    return Taro.setClipboardData(options);
  } else {
    // H5环境下使用navigator.clipboard
    if (navigator.clipboard) {
      navigator.clipboard.writeText(options.data).then(() => {
        // 可选：显示一个提示
        console.log('Text copied to clipboard');
        options.success && options.success({ errMsg: 'copy success' });
      }).catch(err => {
        console.error('Failed to copy text: ', err);
        options.fail && options.fail({ errMsg: 'copy failed' });
      }).finally(() => {
        options.complete && options.complete({ errMsg: 'copy complete' });
      });
    } else {
      console.warn('Clipboard API not supported in this browser');
      options.fail && options.fail({ errMsg: 'clipboard api not supported' });
    }
    return Promise.resolve();
  }
}