import React, { useState, useEffect, useCallback } from 'react'
import { useParams, useNavigate } from 'react-router-dom'
import { ArrowLeft, ThumbsUp, MessageCircle, Share2, BookmarkPlus, Heart, Eye } from 'lucide-react'
import { searchAPI } from '../api/search_jwlll'
import { getUserInfo } from '../utils/auth'
import FollowButton from './FollowButton'
import postsAPI from '../api/posts_api'
import MediaPreview from './MediaPreview'
import '../style/PostDetail.css'
import dayjs from 'dayjs'
import { followUser, unfollowUser } from '../api/api_ljc'

export default function PostDetail() {
  const { id } = useParams()
  const navigate = useNavigate()
  const [post, setPost] = useState(null)
  const [loading, setLoading] = useState(true)
  const [error, setError] = useState(null)
  const [liked, setLiked] = useState(false)
  const [bookmarked, setBookmarked] = useState(false)
  const [likeCount, setLikeCount] = useState(0)
  const [comments, setComments] = useState([])
  const [newComment, setNewComment] = useState('')
  const [showComments, setShowComments] = useState(false)
  const [isFollowing, setIsFollowing] = useState(false)
  const [followLoading, setFollowLoading] = useState(false)
  const [authorInfo, setAuthorInfo] = useState(null)
  const [previewImg, setPreviewImg] = useState(null)
  const [commentUserMap, setCommentUserMap] = useState({}) // user_id: username
  const [commentUserAvatarMap, setCommentUserAvatarMap] = useState({}) // user_id: avatar  // 获取当前用户ID
  const getCurrentUserId = () => {
    const userInfo = getUserInfo()
    return userInfo?.id || '3' // 如果未登录或无用户信息，使用默认值3
  }
  const fetchPostDetail = useCallback(async () => {
    setLoading(true)
    setError(null)
    try {
      const data = await searchAPI.getPostDetail(id)
      setPost(data)
      setLikeCount(data.heat || 0)
      
      // 检查当前用户是否已点赞
      const currentUserId = getCurrentUserId()
      try {
        const hasLiked = await searchAPI.hasLiked(id, currentUserId)
        setLiked(hasLiked)
      } catch (error) {
        console.error('检查点赞状态失败:', error)
        setLiked(false) // 如果检查失败，默认为未点赞
      }
    } catch (error) {
      console.error('获取帖子详情失败:', error)
      setError('帖子不存在或已被删除')
    } finally {
      setLoading(false)
    }
  }, [id])

  const fetchComments = useCallback(async () => {
    try {
      const data = await searchAPI.getComments(id)
      setComments(data.comments || [])
    } catch (error) {
      console.error('获取评论失败:', error)
    }
  }, [id])

  // 检查当前用户是否已关注发帖人
  useEffect(() => {
    if (post && post.user_id) {
      // 这里假设有API postsAPI.getUserFollowing
      const checkFollow = async () => {
        try {
          const userInfo = getUserInfo()
          if (!userInfo?.id) return
          const res = await postsAPI.getUserFollowing(userInfo.id)
          if (Array.isArray(res)) {
            setIsFollowing(res.some(u => u.id === post.user_id))
          } else if (Array.isArray(res.following)) {
            setIsFollowing(res.following.some(u => u.id === post.user_id))
          }
        } catch {}
      }
      checkFollow()
    }
  }, [post])

  // 拉取发帖人信息
  useEffect(() => {
    if (post && post.user_id) {
      postsAPI.getUser(post.user_id).then(res => setAuthorInfo(res || {})).catch(() => setAuthorInfo({}))
    }
  }, [post])

  // 拉取所有评论用户昵称
  const fetchCommentUserNames = async (userIds) => {
    const map = {}
    await Promise.all(userIds.map(async uid => {
      try {
        const user = await postsAPI.getUser(uid)
        map[uid] = user.username || user.nickname || `用户${uid}`
      } catch {
        map[uid] = `用户${uid}`
      }
    }))
    setCommentUserMap(map)
  }

  // 拉取所有评论用户头像
  const fetchCommentUserAvatars = async (userIds) => {
    const map = {}
    await Promise.all(userIds.map(async uid => {
      try {
        const user = await postsAPI.getUser(uid)
        map[uid] = user.avatar && user.avatar.startsWith('http') ? user.avatar : (user.avatar ? `http://10.126.59.25:5715/static/${user.avatar}` : `https://i.pravatar.cc/40?img=${uid}`)
      } catch {
        map[uid] = `https://i.pravatar.cc/40?img=${uid}`
      }
    }))
    setCommentUserAvatarMap(map)
  }

  useEffect(() => {
    fetchPostDetail()
    fetchComments()
  }, [fetchPostDetail, fetchComments])

  // 评论区用户昵称和头像拉取
  useEffect(() => {
    if (comments.length > 0) {
      const userIds = [...new Set(comments.map(c => c.user_id).filter(Boolean))]
      fetchCommentUserNames(userIds)
      fetchCommentUserAvatars(userIds)
    }
  }, [comments])
  const handleBack = () => {
    navigate(-1)
  }
  const handleLike = async () => {
    const currentUserId = getCurrentUserId()
    const originalLiked = liked
    const originalLikeCount = likeCount
    
    try {
      // 先乐观更新UI，提供即时反馈
      const newLiked = !liked
      setLiked(newLiked)
      setLikeCount(prev => newLiked ? prev + 1 : prev - 1)
      
      // 调用后端API
      if (newLiked) {
        await searchAPI.likePost(id, currentUserId)
      } else {
        await searchAPI.unlikePost(id, currentUserId)
      }
      
      // API调用成功，状态已经更新，无需再次设置
    } catch (error) {
      console.error('点赞操作失败:', error)
      
      // 检查是否是可以忽略的错误
      const errorMessage = error.message || error.toString()
      const isIgnorableError = errorMessage.includes('already liked') || 
                              errorMessage.includes('not liked yet') ||
                              errorMessage.includes('already favorited') ||
                              errorMessage.includes('not favorited yet')
      
      if (isIgnorableError) {
        // 这些错误可以忽略，因为最终状态是正确的
        console.log('忽略重复操作错误:', errorMessage)
        return
      }
      
      // 发生真正的错误时回滚到原始状态
      setLiked(originalLiked)
      setLikeCount(originalLikeCount)
      alert('操作失败，请重试')
    }
  }

  const handleBookmark = () => {
    setBookmarked(!bookmarked)
    // 实际项目中这里应该调用后端API保存收藏状态
  }

  const handleShare = () => {
    // 分享功能
    if (navigator.share) {
      navigator.share({
        title: post?.title,
        text: post?.content,
        url: window.location.href,
      })
    } else {
      // 复制链接到剪贴板
      navigator.clipboard.writeText(window.location.href)
      alert('链接已复制到剪贴板')
    }
  }
  const handleAddComment = async (e) => {
    e.preventDefault()
    if (!newComment.trim()) return

    try {
      const currentUserId = getCurrentUserId()
      await searchAPI.addComment(id, currentUserId, newComment)
      setNewComment('')
      fetchComments() // 刷新评论列表
    } catch (error) {
      console.error('添加评论失败:', error)
      alert('评论失败，请重试')
    }
  }

  // 关注后刷新关注状态
  const handleFollowAction = async () => {
  // 添加了加载状态和错误处理
  setFollowLoading(true);
  const currentUserId = getCurrentUserId()
  try {
    if (isFollowing) {
      await unfollowUser(currentUserId, post.user_id);
    } else {
      await followUser(currentUserId, post.user_id);
    }
    setIsFollowing(!isFollowing);
  } catch (error) {
    console.error(isFollowing ? '取消关注失败' : '关注失败', error);
    alert(`操作失败: ${error.message || '请重试'}`);
  } finally {
    setFollowLoading(false);
  }
};

  if (loading) {
    return (
      <div className="post-detail">
        <div className="loading-container">
          <div className="loading-spinner"></div>
          <p>加载中...</p>
        </div>
      </div>
    )
  }

  // 优化错误和不存在的判断逻辑
  if (error) {
    return (
      <div className="post-detail">
        <div className="error-container">
          <h2>😔 出错了</h2>
          <p>{error}</p>
          <button onClick={handleBack} className="back-btn">
            <ArrowLeft size={20} />
            返回
          </button>
        </div>
      </div>
    )
  }

  // 只有明确为 null 或 undefined 时才显示不存在
  if (post === null || post === undefined) {
    return (
      <div className="post-detail">
        <div className="error-container">
          <h2>😔 帖子不存在或已被删除</h2>
          <p>该帖子可能已被删除或不存在</p>
          <button onClick={handleBack} className="back-btn">
            <ArrowLeft size={20} />
            返回
          </button>
        </div>
      </div>
    )
  }

  return (
    <div className="post-detail">
      {/* 顶部导航栏 */}
      <header className="post-header">
        <button onClick={handleBack} className="back-btn">
          <ArrowLeft size={20} />
          返回
        </button>
        <div className="header-actions">
          <button onClick={handleShare} className="action-btn">
            <Share2 size={20} />
          </button>
          <button 
            onClick={handleBookmark} 
            className={`action-btn ${bookmarked ? 'active' : ''}`}
          >
            <BookmarkPlus size={20} />
          </button>
        </div>
      </header>

      {/* 主要内容区 */}
      <main className="post-content">
        {/* 帖子标题 */}
        <h1 className="post-title">{post.title}</h1>

        {/* 作者信息和元数据 */}
        <div className="post-meta">
          <div className="author-info">
            <div className="avatar">
              {authorInfo && authorInfo.avatar && authorInfo.avatar.startsWith('http') ? (
                <img className="avatar" src={authorInfo.avatar} alt={authorInfo.username || authorInfo.nickname || post.author || '用户'} />
              ) : (
                <img className="avatar" src={`https://i.pravatar.cc/40?img=${post.user_id}`} alt={authorInfo?.username || authorInfo?.nickname || post.author || '用户'} />
              )}
            </div>
            <div className="author-details">
              <span className="author-name">{authorInfo?.username || authorInfo?.nickname || post.author || '匿名用户'}</span>
              <span className="post-date">
                {post.created_at ? dayjs(post.created_at).format('YYYY-MM-DD HH:mm:ss') : '未知时间'}
              </span>
              {/* 关注按钮 */}
              {post.user_id && (
                <button 
                  className={`follow-btn ${isFollowing ? 'following' : ''}`}
                  onClick={handleFollowAction}
                  disabled={followLoading}
                  style={{ 
                    marginLeft: '12px', 
                    padding: '4px 12px', 
                    borderRadius: '20px', 
                    border: '1px solid #ccc', 
                    background: isFollowing ? '#f0f0f0' : '#007bff', 
                    color: isFollowing ? '#333' : 'white', 
                    cursor: 'pointer',
                    fontSize: '14px'
                  }}
                >
                  {followLoading ? '处理中...' : (isFollowing ? '已关注' : '关注')}
                </button>
              )}
            </div>
          </div>
          <div className="post-stats">
            <span className="stat-item">
              <Eye size={16} />
              {post.views || 0}
            </span>
            <span className="stat-item">
              <Heart size={16} />
              {likeCount}
            </span>
          </div>
        </div>

        {/* 标签 */}
        {post.tags && post.tags.length > 0 && (
          <div className="post-tags">
            {post.tags.map((tag, index) => (
              <span key={index} className="tag">{tag}</span>
            ))}
          </div>
        )}

        {/* 帖子媒体（支持多图/多视频） */}
        {Array.isArray(post.media_urls) && post.media_urls.length > 0 && (
          <div className="post-media" style={{display:'flex',gap:8,marginBottom:16,flexWrap:'wrap'}}>
            {post.media_urls.map((url, idx) => (
              <MediaPreview
                key={idx}
                url={url}
                alt={`媒体${idx+1}`}
                onClick={(mediaUrl) => {
                  // 对于图片，显示预览
                  if (!mediaUrl.toLowerCase().includes('video') && !mediaUrl.includes('.mp4') && !mediaUrl.includes('.webm')) {
                    setPreviewImg(mediaUrl)
                  }
                }}
                style={{ cursor: 'pointer' }}
                maxWidth={320}
                maxHeight={320}
              />
            ))}
          </div>
        )}
        {/* 大图预览弹窗 */}
        {previewImg && (
          <div className="img-preview-mask" style={{position:'fixed',zIndex:9999,top:0,left:0,right:0,bottom:0,background:'rgba(0,0,0,0.7)',display:'flex',alignItems:'center',justifyContent:'center'}} onClick={()=>setPreviewImg(null)}>
            <img src={previewImg} alt="大图预览" style={{maxWidth:'90vw',maxHeight:'90vh',borderRadius:12,boxShadow:'0 4px 24px #0008'}} />
          </div>
        )}

        {/* 帖子正文 */}
        <div className="post-body">
          <p>{post.content}</p>
        </div>

        {/* 类别信息 */}
        {(post.category || post.type) && (
          <div className="post-category">
            {post.category && (
              <>
                <span className="category-label">分类：</span>
                <span className="category-name">{post.category}</span>
              </>
            )}
            {post.type && (
              <>
                <span className="category-label" style={{marginLeft: '1em'}}>类型：</span>
                <span className="category-name">{post.type}</span>
              </>
            )}
          </div>
        )}

        {/* 评论区 */}
        <div className="comments-section">
          <div className="comments-header">
            <button 
              onClick={() => setShowComments(!showComments)}
              className="comments-toggle"
            >
              <MessageCircle size={20} />
              评论 ({comments.length})
            </button>
          </div>

          {showComments && (
            <div className="comments-content">
              {/* 添加评论 */}
              <form onSubmit={handleAddComment} className="comment-form">
                <textarea
                  value={newComment}
                  onChange={(e) => setNewComment(e.target.value)}
                  placeholder="写下你的评论..."
                  className="comment-input"
                  rows={3}
                />
                <button type="submit" className="comment-submit">
                  发布评论
                </button>
              </form>

              {/* 评论列表 */}
              <div className="comments-list">
                {comments.length === 0 ? (
                  <p className="no-comments">暂无评论</p>
                ) : (
                  comments.map((comment, index) => (
                    <div key={index} className="comment-item">
                      <div className="comment-author">
                        <div className="comment-avatar">
                          <img className="avatar" src={commentUserAvatarMap[comment.user_id] || `https://i.pravatar.cc/40?img=${comment.user_id}`} alt={commentUserMap[comment.user_id] || comment.user_name || '用户'} />
                        </div>
                        <span className="comment-name">{commentUserMap[comment.user_id] || comment.user_name || '匿名用户'}</span>
                        <span className="comment-time">
                          {comment.create_time ? new Date(comment.create_time).toLocaleString('zh-CN') : ''}
                        </span>
                      </div>
                      <div className="comment-content">
                        {comment.content}
                      </div>
                    </div>
                  ))
                )}
              </div>
            </div>
          )}
        </div>
      </main>

      {/* 底部操作栏 */}
      <footer className="post-footer">
        <div className="action-bar">
          <button 
            onClick={handleLike} 
            className={`action-button ${liked ? 'liked' : ''}`}
          >
            <ThumbsUp size={20} />
            <span>{likeCount}</span>
          </button>
          
          <button 
            onClick={() => setShowComments(!showComments)}
            className="action-button"
          >
            <MessageCircle size={20} />
            <span>评论</span>
          </button>
          
          <button onClick={handleShare} className="action-button">
            <Share2 size={20} />
            <span>分享</span>
          </button>
          
          <button 
            onClick={handleBookmark} 
            className={`action-button ${bookmarked ? 'bookmarked' : ''}`}
          >
            <BookmarkPlus size={20} />
            <span>收藏</span>
          </button>
        </div>
      </footer>
    </div>
  )
}
