/**
 * 解析OSS图片URL中的尺寸信息
 * 支持的URL格式: ?x-oss-process=image/rotate,90/crop,w_1277,h_267,x_204,y_1151
 */
export interface OSSImageInfo {
  /** 图片宽度（考虑旋转后的实际显示宽度） */
  width: number
  /** 图片高度（考虑旋转后的实际显示高度） */
  height: number
  /** 裁剪信息 */
  crop?: {
    x: number
    y: number
    width: number
    height: number
  }
}

/**
 * 从OSS URL中解析图片尺寸信息
 * @param url OSS图片URL
 * @returns 图片尺寸信息，如果无法解析则返回null
 */
export function parseOSSImageSize(url: string): OSSImageInfo | null {
  try {
    // 从URL中提取查询参数部分
    const queryIndex = url.indexOf('?')
    if (queryIndex === -1) {
      return null
    }

    const queryString = url.substring(queryIndex + 1)

    // 手动解析查询参数
    const params = new Map<string, string>()
    const pairs = queryString.split('&')
    for (const pair of pairs) {
      const [key, value] = pair.split('=')
      if (key && value) {
        params.set(decodeURIComponent(key), decodeURIComponent(value))
      }
    }

    const processParam = params.get('x-oss-process')
    if (!processParam) {
      return null
    }

    // 解析 x-oss-process 参数
    // 格式: image/rotate,90/crop,w_1277,h_267,x_204,y_1151
    const parts = processParam.split('/')

    let rotateAngle = 0
    let cropInfo: { x: number, y: number, width: number, height: number } | undefined

    for (const part of parts) {
      // 解析旋转角度
      if (part.startsWith('rotate,')) {
        const angle = Number.parseInt(part.replace('rotate,', ''), 10)
        if (!Number.isNaN(angle)) {
          rotateAngle = angle
        }
      }

      // 解析裁剪信息
      if (part.startsWith('crop,')) {
        const cropParams = part.replace('crop,', '').split(',')
        const cropData: Record<string, number> = {}

        for (const param of cropParams) {
          const [key, value] = param.split('_')
          if (key && value) {
            const numValue = Number.parseInt(value, 10)
            if (!Number.isNaN(numValue)) {
              cropData[key] = numValue
            }
          }
        }

        if (cropData.w && cropData.h) {
          cropInfo = {
            x: cropData.x || 0,
            y: cropData.y || 0,
            width: cropData.w,
            height: cropData.h,
          }
        }
      }
    }

    // 如果没有裁剪信息,无法确定尺寸
    if (!cropInfo) {
      return null
    }

    return {
      width: cropInfo.width,
      height: cropInfo.height,
      crop: cropInfo,
    }
  }
  catch (error) {
    console.warn('Failed to parse OSS image URL:', error)
    return null
  }
}
