/**
 * 处方数据存储工具类
 * 职责：统一管理处方数据的本地存储操作
 */
export class PrescriptionStorage {
  /**
   * 存储前缀
   */
  static STORAGE_PREFIX = 'prescriptionV2-';

  /**
   * 获取存储键名
   * @param {number} category - 处方类型：1=中药，2=西药，3=保健食品，5=产品服务包，6=非药品，7=医疗器械
   * @param {number} registerId - 挂号ID
   * @returns {string} 存储键名
   */
  static getStorageKey(category, registerId) {
    return `${this.STORAGE_PREFIX}prescriptionData_${category}_${registerId}`;
  }

  /**
   * 获取激活分类的存储键名
   * @param {number} registerId - 挂号ID
   * @returns {string} 存储键名
   */
  static getActiveCategoryKey(registerId) {
    return `${this.STORAGE_PREFIX}activeCategory_${registerId}`;
  }

  /**
   * 保存处方数据到本地存储
   * @param {number} category - 处方类型
   * @param {number} registerId - 挂号ID
   * @param {Object} data - 处方数据（药品列表、诊断、医嘱等）
   */
  static savePrescriptionData(category, registerId, data) {
    try {
      const key = this.getStorageKey(category, registerId);
      uni.setStorageSync(key, JSON.stringify(data));
      console.log('保存处方数据成功:', key, data);
    } catch (error) {
      console.error('保存处方数据失败:', error);
    }
  }

  /**
   * 从本地存储加载处方数据
   * @param {number} category - 处方类型
   * @param {number} registerId - 挂号ID
   * @returns {Object|null} 处方数据
   */
  static loadPrescriptionData(category, registerId) {
    try {
      const key = this.getStorageKey(category, registerId);
      const data = uni.getStorageSync(key);
      if (data) {
        return JSON.parse(data);
      }
      return null;
    } catch (error) {
      console.error('加载处方数据失败:', error);
      return null;
    }
  }

  /**
   * 清除指定处方的本地存储数据
   * @param {number} category - 处方类型
   * @param {number} registerId - 挂号ID
   */
  static clearPrescriptionData(category, registerId) {
    try {
      const key = this.getStorageKey(category, registerId);
      uni.removeStorageSync(key);
    } catch (error) {
      console.error('清除处方数据失败:', error);
    }
  }

  /**
   * 清除所有处方的本地存储数据
   * @param {number} registerId - 挂号ID
   */
  static clearAllPrescriptionData(registerId) {
    try {
      const categories = [1, 2, 3, 5, 6, 7];
      categories.forEach(category => {
        this.clearPrescriptionData(category, registerId);
      });
      // 清除激活分类
      uni.removeStorageSync(this.getActiveCategoryKey(registerId));
    } catch (error) {
      console.error('清除所有处方数据失败:', error);
    }
  }

  /**
   * 保存当前激活的分类
   * @param {number} category - 处方类型
   * @param {number} registerId - 挂号ID
   */
  static saveActiveCategory(category, registerId) {
    try {
      const key = this.getActiveCategoryKey(registerId);
      uni.setStorageSync(key, category.toString());
    } catch (error) {
      console.error('保存激活分类失败:', error);
    }
  }

  /**
   * 获取当前激活的分类
   * @param {number} registerId - 挂号ID
   * @returns {number|null} 激活的分类，如果没有则返回null
   */
  static getActiveCategory(registerId) {
    try {
      const key = this.getActiveCategoryKey(registerId);
      const category = uni.getStorageSync(key);
      if (category) {
        return parseInt(category);
      }
      return null;
    } catch (error) {
      console.error('获取激活分类失败:', error);
      return null;
    }
  }

  /**
   * 当前挂号草稿中是否已有任一分类的药品（用于复用前覆盖确认）
   * @param {string|number} registerId
   * @returns {boolean}
   */
  static hasDraftWithDrugs(registerId) {
    if (registerId === undefined || registerId === null || registerId === '') {
      return false;
    }
    const categories = [1, 2, 3, 5, 6, 7];
    return categories.some((category) => {
      const data = this.loadPrescriptionData(category, registerId);
      return data && Array.isArray(data.drugs) && data.drugs.length > 0;
    });
  }
}
