/* eslint-disable camelcase */
const PostModel = require('../../../models/PostModel');
const jwt = require('jsonwebtoken');
const UserModel = require('../../../models/UserModel');
const LikeModel = require('../../../models/LikeModel');

const toggleLike = async (req, res, next) => {
  try {
    const { postId } = req.body;
    const token = req.header('Authorization')?.split(' ')[1];

    if (!token) {
      return res.status(401).json({ message: 'توکن ارائه نشده است' });
    }

    let userId;
    try {
      const decodedToken = jwt.verify(token, process.env.APP_SECRET);
      userId = decodedToken.id;
    } catch (err) {
      return res.status(401).json({ message: 'توکن نامعتبر است' });
    }

    if (!postId) {
      return res.status(400).json({ message: 'شناسه پست الزامی است' });
    }

    const post = await PostModel.findById(postId);
    if (!post) {
      return res.status(404).json({ message: 'پست مورد نظر یافت نشد' });
    }

    const isLiked = post.likes.includes(userId);
    if (isLiked) {
      // unlike
      post.likes.pull(userId);
      await post.save();
      await LikeModel.findOneAndDelete({ postId, userId });

      return res.status(200).json({
        message: 'لایک با موفقیت حذف شد',
        is_liked: false,
        likesCount: post.likes.length,
      });
    } else {
      // like
      post.likes.push(userId);
      await post.save();
      await LikeModel.create({ postId, userId });

      return res.status(200).json({
        message: 'پست با موفقیت لایک شد',
        is_liked: true,
        likesCount: post.likes.length,
      });
    }
  } catch (error) {
    console.error('خطا در toggleLike:', error);
    res.status(500).json({ message: 'خطا در سرور' });
    next(error);
  }
};

module.exports = { toggleLike };