from django.test import TestCase
from django.contrib.auth import get_user_model
from rest_framework.test import APIClient
from rest_framework import status
from posts.models import Post
from chat.models import Conversation, Message

User = get_user_model()

class PostSharingTests(TestCase):
    def setUp(self):
        self.client = APIClient()
        self.user1 = User.objects.create_user(username='user1', email='user1@example.com', password='password')
        self.user2 = User.objects.create_user(username='user2', email='user2@example.com', password='password')
        self.client.force_authenticate(user=self.user1)

        # Create a post
        self.post = Post.objects.create(created_by=self.user1, content="Test Post")

        # Create a conversation
        self.conversation = Conversation.objects.create(initiator=self.user1)
        self.conversation.participants.add(self.user1, self.user2)

    def test_share_post_to_conversation(self):
        url = f'/api/v1/chat/conversations/{self.conversation.id}/share-post/'
        data = {'post_id': self.post.id}

        response = self.client.post(url, data)

        self.assertEqual(response.status_code, status.HTTP_201_CREATED, response.content)

        # Verify message created
        message = Message.objects.last()
        self.assertEqual(message.message_type, 'post')
        self.assertEqual(message.shared_post, self.post)
        self.assertEqual(message.conversation, self.conversation)

        # Verify post shared_count incremented
        self.post.refresh_from_db()
        self.assertEqual(self.post.shared_count, 1)

    def test_share_non_existent_post(self):
        url = f'/api/v1/chat/conversations/{self.conversation.id}/share-post/'
        data = {'post_id': 9999}

        response = self.client.post(url, data)

        self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
