/**
 * SEO工具函数 - 符合国内搜索引擎和未来趋势
 * 在组件中直接定义SEO信息，立即同步设置到HTML
 */
const DEFAULT_SITE_NAME = 'Jingrow'
const DEFAULT_OG_IMAGE = '/logo.svg'

function setMetaTag(name: string, content: string, attribute: 'name' | 'property' = 'name') {
  if (!content || typeof document === 'undefined') return
  
  const selector = `meta[${attribute}="${name}"]`
  let tag = document.querySelector(selector) as HTMLMetaElement
  
  if (!tag) {
    tag = document.createElement('meta')
    tag.setAttribute(attribute, name)
    document.head.appendChild(tag)
  }
  
  tag.setAttribute('content', content)
}

function setLinkTag(rel: string, href: string) {
  if (!href || typeof document === 'undefined') return
  
  const selector = `link[rel="${rel}"]`
  let tag = document.querySelector(selector) as HTMLLinkElement
  
  if (!tag) {
    tag = document.createElement('link')
    tag.setAttribute('rel', rel)
    document.head.appendChild(tag)
  }
  
  tag.setAttribute('href', href)
}

function setJSONLD(data: object) {
  if (typeof document === 'undefined') return
  
  // 移除旧的 JSON-LD
  const existingScript = document.querySelector('script[type="application/ld+json"]')
  if (existingScript) {
    existingScript.remove()
  }
  
  // 添加新的 JSON-LD
  const script = document.createElement('script')
  script.type = 'application/ld+json'
  script.textContent = JSON.stringify(data, null, 2)
  document.head.appendChild(script)
}

/**
 * 设置SEO标签 - 立即同步执行
 * 符合国内搜索引擎（百度、360、搜狗）和未来趋势
 * @param data SEO数据
 */
export function useSEO(data: {
  title?: string
  description?: string
  keywords?: string
  image?: string
  url?: string
  robots?: string
}) {
  if (typeof window === 'undefined' || typeof document === 'undefined') return
  
  const pathname = window.location.pathname
  const url = data.url || pathname
  const image = data.image || DEFAULT_OG_IMAGE
  const title = data.title ? `${data.title} - ${DEFAULT_SITE_NAME}` : DEFAULT_SITE_NAME

  // Title - 立即设置（百度推荐：前20字核心信息+品牌词）
  if (data.title) document.title = title

  // Meta description - 立即设置（百度推荐：150字符以内）
  if (data.description) setMetaTag('description', data.description)

  // Keywords - 国内搜索引擎仍在使用
  if (data.keywords) setMetaTag('keywords', data.keywords)

  // Robots - 控制爬虫行为
  if (data.robots) {
    setMetaTag('robots', data.robots)
  } else {
    // 默认允许索引
    setMetaTag('robots', 'index,follow')
  }

  // Open Graph - 立即设置
  if (data.title) setMetaTag('og:title', data.title, 'property')
  if (data.description) setMetaTag('og:description', data.description, 'property')
  setMetaTag('og:image', image, 'property')
  setMetaTag('og:url', url, 'property')
  setMetaTag('og:type', 'website', 'property')
  setMetaTag('og:site_name', DEFAULT_SITE_NAME, 'property')
  setMetaTag('og:locale', 'zh_CN', 'property')

  // Twitter Card - 立即设置
  setMetaTag('twitter:card', 'summary_large_image')
  if (data.title) setMetaTag('twitter:title', data.title)
  if (data.description) setMetaTag('twitter:description', data.description)
  setMetaTag('twitter:image', image)

  // Canonical - 立即设置
  setLinkTag('canonical', url)

  // 结构化数据（JSON-LD）
  if (data.title && data.description) {
    const jsonLd = {
      '@context': 'https://schema.org',
      '@type': 'WebPage',
      name: data.title,
      description: data.description,
      url: url,
      publisher: {
        '@type': 'Organization',
        name: DEFAULT_SITE_NAME,
        logo: {
          '@type': 'ImageObject',
          url: image
        }
      }
    }

    setJSONLD(jsonLd)
  }
}
