/**
 * 商品克隆工具辅助函数
 */
import CryptoJS from 'crypto-js';

/**
 * 生成设备ID
 * 基于设备信息生成唯一标识符
 */
export function generateDeviceId() {
  try {
    // 获取系统信息
    const systemInfo = uni.getSystemInfoSync();
    
    // 组合设备信息
    const deviceInfo = [
      systemInfo.deviceId || '',
      systemInfo.deviceBrand || '',
      systemInfo.deviceModel || '',
      systemInfo.system || '',
      systemInfo.platform || '',
      systemInfo.SDKVersion || ''
    ].filter(item => item).join('|');
    
    // 使用MD5生成设备ID
    if (deviceInfo) {
      return CryptoJS.MD5(deviceInfo).toString().toUpperCase();
    } else {
      return 'UNKNOWN_DEVICE_' + Math.random().toString(36).substring(2, 10);
    }
  } catch (e) {
    console.error('生成设备ID失败:', e);
    return 'ERROR_DEVICE_' + Math.random().toString(36).substring(2, 10);
  }
}

/**
 * 验证日期格式 (YYYYMMDD)
 * @param {string} dateStr - 日期字符串
 * @returns {boolean} - 是否有效
 */
export function validateDate(dateStr) {
  if (!dateStr || dateStr.length !== 8) {
    return false;
  }
  
  try {
    const year = parseInt(dateStr.substring(0, 4));
    const month = parseInt(dateStr.substring(4, 6));
    const day = parseInt(dateStr.substring(6, 8));
    
    if (year < 1900 || year > 2100 || month < 1 || month > 12 || day < 1 || day > 31) {
      return false;
    }
    
    // 检查特定月份的天数
    if (month === 2) {
      // 闰年检查
      const isLeapYear = (year % 4 === 0 && year % 100 !== 0) || (year % 400 === 0);
      if (day > (isLeapYear ? 29 : 28)) {
        return false;
      }
    } else if ([4, 6, 9, 11].includes(month) && day > 30) {
      return false;
    }
    
    return true;
  } catch (e) {
    return false;
  }
}

/**
 * 日期字符串转时间戳
 * @param {string} dateStr - 日期字符串 (YYYYMMDD)
 * @param {boolean} endOfDay - 是否为当天结束时间
 * @returns {number} - 时间戳(秒)
 */
export function dateToTimestamp(dateStr, endOfDay = false) {
  if (!dateStr || dateStr.length !== 8) {
    throw new Error('日期格式错误，必须是8位数字(YYYYMMDD)');
  }
  
  const year = parseInt(dateStr.substring(0, 4));
  const month = parseInt(dateStr.substring(4, 6)) - 1; // 月份从0开始
  const day = parseInt(dateStr.substring(6, 8));
  
  let date;
  if (endOfDay) {
    date = new Date(year, month, day, 23, 59, 59);
  } else {
    date = new Date(year, month, day, 0, 0, 0);
  }
  
  return Math.floor(date.getTime() / 1000);
}

/**
 * 调整价格
 * @param {number|string} originalPrice - 原始价格
 * @param {number} configType - 调整类型 (1:折扣, 2:加减值, 3:指定金额)
 * @param {number} value - 调整值
 * @returns {string} - 调整后的价格字符串(保留2位小数)
 */
export function adjustPrice(originalPrice, configType, value) {
  try {
    let price = parseFloat(originalPrice);
    if (isNaN(price)) {
      return originalPrice.toString();
    }
    
    switch (configType) {
      case 1: // 折扣
        price *= (value / 100);
        break;
      case 2: // 加减值
        price += value;
        break;
      case 3: // 指定金额
        price = value;
        break;
    }
    
    // 确保价格为正数
    price = Math.max(0.01, price);
    return price.toFixed(2);
  } catch (e) {
    console.error('价格调整失败:', e);
    return originalPrice.toString();
  }
}

/**
 * 格式化日志消息
 * @param {string} message - 日志消息
 * @returns {string} - 格式化后的日志消息
 */
export function formatLogMessage(message) {
  const timestamp = new Date().toLocaleString('zh-CN', {
    year: 'numeric',
    month: '2-digit',
    day: '2-digit',
    hour: '2-digit',
    minute: '2-digit',
    second: '2-digit'
  });
  return `[${timestamp}] ${message}`;
}

/**
 * 保存数据到本地存储
 * @param {string} key - 存储键名
 * @param {any} data - 要存储的数据
 * @returns {boolean} - 是否成功
 */
export function saveToStorage(key, data) {
  try {
    uni.setStorageSync(key, JSON.stringify(data));
    return true;
  } catch (e) {
    console.error(`保存数据失败 (${key}):`, e);
    return false;
  }
}

/**
 * 从本地存储加载数据
 * @param {string} key - 存储键名
 * @param {any} defaultValue - 默认值
 * @returns {any} - 加载的数据或默认值
 */
export function loadFromStorage(key, defaultValue = null) {
  try {
    const value = uni.getStorageSync(key);
    if (value) {
      return JSON.parse(value);
    }
    return defaultValue;
  } catch (e) {
    console.error(`加载数据失败 (${key}):`, e);
    return defaultValue;
  }
}

/**
 * 获取新商品ID列表
 * @returns {Array} - 新商品ID列表
 */
export function getNewItemIds() {
  try {
    const newIds = uni.getStorageSync('kongfz_new_ids') || [];
    return Array.isArray(newIds) ? newIds : [];
  } catch (e) {
    console.error('获取新商品ID列表失败:', e);
    return [];
  }
}

/**
 * 清空新商品ID列表
 * @returns {boolean} - 是否成功
 */
export function clearNewItemIds() {
  try {
    uni.removeStorageSync('kongfz_new_ids');
    return true;
  } catch (e) {
    console.error('清空新商品ID列表失败:', e);
    return false;
  }
}