// utils/location.js
import { getCookie, setCookie } from '@/utils/cookie'
import { WechatLocation } from '@/utils/wechat'
import api from '@/utils/api'

// 默认位置（厦门）
const DEFAULT_LOCATION = {
  latitude: '24.479627',
  longitude: '118.08891'
}

/**
 * 获取用户位置信息
 * @returns {Promise<Object>} 位置信息
 */
export async function getUserLocation() {
  try {
    if (isWechatBrowser()) {
      const locationStr = getCookie('userLocation')
      if (locationStr) {
        try {
          return JSON.parse(locationStr)
        } catch (e) {
          console.warn('解析 userLocation cookie 失败')
        }
      }
      return await WechatLocation.getLocation('gcj02')
    } else {
      return DEFAULT_LOCATION
    }
  } catch (error) {
    console.error('获取位置失败:', error)
    return DEFAULT_LOCATION
  }
}

/**
 * 检查是否在微信浏览器中
 * @returns {boolean} 是否为微信浏览器
 */
export function isWechatBrowser() {
  const ua = navigator.userAgent.toLowerCase()
  return ua.includes('micromessenger')
}

/**
 * 获取城市信息
 * @param {Object} location 位置信息
 * @returns {Promise<Object>} 城市信息
 */
export async function getCityInfo(location) {
  try {
    // 优先从cookie获取缓存的城市信息
    const cityInfoStr = getCookie('cityInfo')
    if (cityInfoStr) {
      try {
        const cachedCityInfo = JSON.parse(cityInfoStr)
        if (cachedCityInfo && cachedCityInfo.cityId) {
          return cachedCityInfo
        }
      } catch (e) {
        console.warn('解析 cityInfo cookie 失败')
      }
    }

    // 调用API获取城市信息
    if (location && location.latitude && location.longitude) {
      const result = await api.wechatAPI.getLocationCity(location.latitude, location.longitude)
      if (result.code === 200 && result.data) {
        return result.data
      }
    }

    return null
  } catch (error) {
    console.error('获取城市信息失败:', error)
    return null
  }
}

/**
 * 缓存位置和城市信息
 * @param {Object} location 位置信息
 * @param {Object} cityInfo 城市信息
 */
export function cacheLocationInfo(location, cityInfo) {
  try {
    if (cityInfo) {
      setCookie('cityInfo', JSON.stringify(cityInfo), 1)
    }
    if (location) {
      setCookie('userLocation', JSON.stringify({
        ...location,
        time: new Date().getTime()
      }), 1)
    }
  } catch (error) {
    console.error('缓存位置信息失败:', error)
  }
}
