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 ,getUserFollowing} 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])

  // 检查当前用户是否已关注发帖人
  const checkFollowStatus = useCallback(async (postUserId) => {
  if (!postUserId) return;
  
  const currentUserId = getCurrentUserId();
  if (!currentUserId) return;
  
  try {
    const response = await getUserFollowing(currentUserId);
    // 处理不同的响应结构
    const followingList = Array.isArray(response) ? response : (response.data || []);
    
    console.log(response)
    // 检查目标用户是否在关注列表中
    setIsFollowing(
      followingList.some(user => user.id === postUserId)
    );
  } catch (error) {
    console.error('获取关注状态失败:', error);
  }
}, []);

// 当帖子数据加载后，检查关注状态
useEffect(() => {
  if (post && post.user_id) {
    checkFollowStatus(post.user_id);
  }
}, [post, checkFollowStatus])

  // 拉取发帖人信息
  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>
  )
}
