import { PostDto, VisitType } from "@nice/common";
import { motion } from "framer-motion";
import dayjs from "dayjs";

import { Avatar } from "antd";
import { useVisitor } from "@nice/client";
import { useContext, useState } from "react";
import { PostDetailContext } from "./context/PostDetailContext";
import { LikeFilled, LikeOutlined } from "@ant-design/icons";

export default function PostCommentCard({
	post,
	index,
	isReceiverComment,
}: {
	post: PostDto;
	index: number;
	isReceiverComment: boolean;
}) {
	const { user } = useContext(PostDetailContext);
	const { like, unLike } = useVisitor();
	const [liked, setLiked] = useState(post?.liked || false);
	const [likeCount, setLikeCount] = useState(post?.likes || 0);

	async function likeThisPost() {
		if (!liked) {
			try {
				setLikeCount((prev) => prev + 1);
				setLiked(true);
				like.mutateAsync({
					data: {
						visitorId: user?.id || null,
						postId: post.id,
						type: VisitType.LIKE,
					},
				});
			} catch (error) {
				console.error("Failed to like post:", error);
				setLikeCount((prev) => prev - 1);
				setLiked(false);
			}
		} else {
			setLikeCount((prev) => prev - 1);
			setLiked(false);
			unLike.mutateAsync({
				where: {
					visitorId: user?.id || null,
					postId: post.id,
					type: VisitType.LIKE,
				},
			});
		}
	}
	return (
		<motion.div
			className="bg-white rounded-lg shadow-sm border border-slate-200 p-4"
			layout>
			<div className="flex items-start space-x-3">
				<div className="flex-shrink-0">
					<Avatar
						className="ring-2 ring-white hover:ring-[#00538E]/90
                        transition-all duration-200 ease-in-out shadow-md
                        hover:shadow-lg"
						src={post.author?.avatar}
						size={40}>
						{!post.author?.avatar &&
							(post.author?.showname || "匿名用户")}
					</Avatar>
				</div>
				<div className="flex-1 min-w-0">
					<div
						className="flex items-center space-x-2"
						style={{ height: 40 }}>
						<span className="font-medium text-slate-900">
							{post.author?.showname || "匿名用户"}
						</span>
						<span className="text-sm text-slate-500">
							{dayjs(post?.createdAt).format("YYYY-MM-DD HH:mm")}
						</span>
						{isReceiverComment && (
							<span className="inline-flex items-center px-2 py-1 text-xs font-medium rounded-full bg-blue-100 text-blue-800">
								官方回答
							</span>
						)}
					</div>
					<div
						className="ql-editor text-slate-800"
						style={{
							padding: 0,
						}}
						dangerouslySetInnerHTML={{ __html: post.content || "" }}
					/>

					{/* 添加有帮助按钮 */}
					<div className="mt-3 flex items-center">
						<motion.button
							onClick={likeThisPost}
							whileHover={{ scale: 1.05 }}
							whileTap={{ scale: 0.95 }}
							className={`inline-flex items-center space-x-1.5 px-3 py-1.5 rounded-full text-sm
							${
								liked
									? "bg-blue-50 text-blue-600"
									: "hover:bg-slate-50 text-slate-600"
							} transition-colors duration-200`}>
							{liked ? <LikeFilled /> : <LikeOutlined />}
							<span>{likeCount} 有帮助</span>
						</motion.button>
					</div>
				</div>
			</div>
		</motion.div>
	);
}
