import { ref, computed, watch } from 'vue'

/**
 * 统一管理水质设备和控制器的展开收缩逻辑
 * @returns {Object} 包含展开收缩状态和相关方法的对象
 */
export function useExpandManager() {
  // 模块展开状态
  const waterExpand = ref(true)
  const controlExpand = ref(true)
  
  // 记录用户手动展开/收缩的操作
  const userWaterExpand = ref(null) // null表示未手动操作，true/false表示用户手动操作的状态
  const userControlExpand = ref(null)
  
  // 模块高度
  const waterHeight = ref('66%')
  const controlHeight = ref('32%')

  /**
   * 初始化模块展开状态
   * @param {Boolean} hasWaterData - 水质设备是否有数据
   * @param {Boolean} hasControlData - 控制器是否有数据
   * @param {String} updatedModule - 哪个模块的数据被更新了 ('water', 'control', 'both', or 'none')
   */
  const initializeExpandStatus = (hasWaterData, hasControlData, updatedModule = 'both') => {
    // 核心需求：切换塘口时，如果对应模块是收缩模式，就展开该模块，不影响其他模块
    
    // 水质设备数据更新时的逻辑
    if (updatedModule === 'water') {
      // 水质设备塘口筛选时的逻辑
      // 如果水质设备当前是收缩状态，自动展开
      if (!waterExpand.value) {
        waterExpand.value = true
        // 更新用户操作记录
        userWaterExpand.value = true
      }
      
      // 用户手动操作逻辑：如果用户明确手动收缩过，保持收缩状态
      if (userWaterExpand.value !== null && userWaterExpand.value === false) {
        waterExpand.value = false
      }
    }
    
    // 控制器数据更新时的逻辑
    if (updatedModule === 'control') {
      // 控制器塘口筛选时的逻辑
      // 如果控制器当前是收缩状态，自动展开
      if (!controlExpand.value) {
        controlExpand.value = true
        // 更新用户操作记录
        userControlExpand.value = true
      }
      
      // 用户手动操作逻辑：如果用户明确手动收缩过，保持收缩状态
      if (userControlExpand.value !== null && userControlExpand.value === false) {
        controlExpand.value = false
      }
    }

    // 两者都更新或初始加载时的逻辑
    if (updatedModule === 'both' || updatedModule === 'none') {
      // 水质设备处理
      if (!waterExpand.value) {
        waterExpand.value = true
        userWaterExpand.value = true
      }
      if (userWaterExpand.value !== null && userWaterExpand.value === false) {
        waterExpand.value = false
      }

      // 控制器处理
      if (!controlExpand.value) {
        controlExpand.value = true
        userControlExpand.value = true
      }
      if (userControlExpand.value !== null && userControlExpand.value === false) {
        controlExpand.value = false
      }
    }

    // 原始逻辑：当用户从未手动操作过任何模块时，根据数据情况决定默认状态
    if (userWaterExpand.value === null && userControlExpand.value === null) {
      if (!hasWaterData && !hasControlData) {
        // 两者都没有数据，都默认展开
        waterExpand.value = true
        controlExpand.value = true
      } else if (hasWaterData && !hasControlData) {
        // 只有水质设备有数据
        waterExpand.value = true
        controlExpand.value = false
      } else if (!hasWaterData && hasControlData) {
        // 只有控制器有数据
        waterExpand.value = false
        controlExpand.value = true
      } else {
        // 两者都有数据，都默认展开
        waterExpand.value = true
        controlExpand.value = true
      }
    }

    // 更新高度
    updateModuleHeights(hasWaterData, hasControlData)
  }

  /**
   * 处理水质设备展开收缩
   * @param {Boolean} flag - 是否展开
   */
  const handleWaterExpand = (flag) => {
    waterExpand.value = flag
    // 记录用户的手动操作
    userWaterExpand.value = flag
    
    if (flag) {
      // 如果水质设备要展开，保持控制器当前状态，调整高度
      waterHeight.value = controlExpand.value ? '66%' : '91.5%'
      controlHeight.value = controlExpand.value ? '32%' : '6.5%'
    } else {
      // 如果水质设备要收缩，控制器也收缩到最小高度（第二个需求）
      if (!controlExpand.value) {
        // 两者都收缩
        waterHeight.value = '6.5%'
        controlHeight.value = '6.5%'
      } else {
        // 只有水质设备收缩
        waterHeight.value = '6.5%'
        controlHeight.value = '91.5%'
      }
    }
  }

  /**
   * 处理控制器展开收缩
   * @param {Boolean} flag - 是否展开
   */
  const handleControlExpand = (flag) => {
    controlExpand.value = flag
    // 记录用户的手动操作
    userControlExpand.value = flag
    
    if (flag) {
      // 如果控制器要展开，保持水质设备当前状态，调整高度
      waterHeight.value = waterExpand.value ? '66%' : '6.5%'
      controlHeight.value = waterExpand.value ? '32%' : '91.5%'
    } else {
      // 如果控制器要收缩，水质设备也收缩到最小高度（第二个需求）
      if (!waterExpand.value) {
        // 两者都收缩
        waterHeight.value = '6.5%'
        controlHeight.value = '6.5%'
      } else {
        // 只有控制器收缩
        waterHeight.value = '91.5%'
        controlHeight.value = '6.5%'
      }
    }
  }

  /**
   * 更新模块高度
   * 当一个模块的数据状态变化时调用
   * @param {Boolean} hasWaterData - 水质设备是否有数据
   * @param {Boolean} hasControlData - 控制器是否有数据
   */
  const updateModuleHeights = (hasWaterData, hasControlData) => {
    if (waterExpand.value && controlExpand.value) {
      // 两者都展开
      waterHeight.value = '66%'
      controlHeight.value = '32%'
    } else if (waterExpand.value && !controlExpand.value) {
      // 只有水质设备展开
      waterHeight.value = '91.5%'
      controlHeight.value = '6.5%'
    } else if (!waterExpand.value && controlExpand.value) {
      // 只有控制器展开
      waterHeight.value = '6.5%'
      controlHeight.value = '91.5%'
    } else {
      // 两者都收缩，根据数据情况决定（如果两者都没数据，则都保持最小高度）
      waterHeight.value = '6.5%'
      controlHeight.value = '6.5%'
    }
  }

  return {
    // 状态
    waterExpand,
    controlExpand,
    waterHeight,
    controlHeight,
    
    // 方法
    initializeExpandStatus,
    handleWaterExpand,
    handleControlExpand,
    updateModuleHeights
  }
}