import {useState, useEffect, useCallback} from 'react'
import Taro from '@tarojs/taro'
import {getShopDealerUser} from '@/api/shop/shopDealerUser'
import type {ShopDealerUser} from '@/api/shop/shopDealerUser/model'

// Hook 返回值接口
export interface UseDealerUserReturn {
  // 经销商用户信息
  dealerUser: ShopDealerUser | null
  // 加载状态
  loading: boolean
  // 错误信息
  error: string | null
  // 刷新数据
  refresh: () => Promise<void>
}


/**
 * 经销商用户 Hook - 简化版本
 * 只查询经销商用户信息和判断是否存在
 */
export const useDealerUser = (): UseDealerUserReturn => {
  const [dealerUser, setDealerUser] = useState<ShopDealerUser | null>(null)
  const [loading, setLoading] = useState(false)
  const [error, setError] = useState<string | null>(null)

  const userId = Taro.getStorageSync('UserId');

  // 获取经销商用户数据
  const fetchDealerData = useCallback(async () => {

    if (!userId) {
      console.log('🔍 用户未登录，提前返回')
      setDealerUser(null)
      return
    }

    try {
      setLoading(true)
      setError(null)

      // 查询当前用户的经销商信息
      const dealer = await getShopDealerUser(userId)
      if (dealer) {
        setDealerUser(dealer)
      } else {
        setDealerUser(null)
        // 没有经销商记录，跳转到申请加入页面
        Taro.redirectTo({ url: '/dealer/apply/add' })
      }
    } catch (err) {
      const errorMessage = err instanceof Error ? err.message : '获取经销商信息失败'
      // 如果错误消息是"操作成功"（接口返回成功但无数据），也跳转到申请页面
      if (errorMessage === '操作成功' || errorMessage === '查询成功') {
        setDealerUser(null)
        Taro.redirectTo({ url: '/dealer/apply/add' })
        return
      }
      setError(errorMessage)
      setDealerUser(null)
    } finally {
      setLoading(false)
    }
  }, [userId])

  // 刷新数据
  const refresh = useCallback(async () => {
    await fetchDealerData()
  }, [fetchDealerData])

  // 初始化加载数据
  useEffect(() => {
    if (userId) {
      console.log('🔍 调用 fetchDealerData')
      fetchDealerData().then()
    } else {
      console.log('🔍 用户ID不存在，不调用 fetchDealerData')
    }
  }, [fetchDealerData, userId])

  return {
    dealerUser,
    loading,
    error,
    refresh
  }
}
