"""
Тесты интеграции Django с sfu-server.
"""
from django.test import TestCase
from django.contrib.auth import get_user_model
from apps.video.services import get_sfu_client, SFUClientError
from apps.schedule.models import Lesson
from apps.video.models import VideoRoom
import uuid

User = get_user_model()


class SFUClientTestCase(TestCase):
    """Тесты SFU клиента."""
    
    def setUp(self):
        """Настройка тестов."""
        self.mentor = User.objects.create_user(
            email='mentor@test.com',
            password='testpass123',
            role='mentor',
            first_name='Test',
            last_name='Mentor'
        )
        self.client_user = User.objects.create_user(
            email='client@test.com',
            password='testpass123',
            role='client',
            first_name='Test',
            last_name='Client'
        )
    
    def test_health_check(self):
        """Тест проверки доступности sfu-server."""
        client = get_sfu_client()
        # В тестах может не быть запущенного sfu-server, поэтому просто проверяем что метод вызывается
        try:
            result = client.health_check()
            self.assertIsInstance(result, bool)
        except Exception as e:
            # Если sfu-server не доступен, это нормально для тестов
            pass
    
    def test_create_room(self):
        """Тест создания комнаты в sfu-server."""
        client = get_sfu_client()
        room_id = str(uuid.uuid4())
        
        try:
            result = client.create_room(room_id)
            self.assertIn('room_id', result)
            self.assertEqual(result['room_id'], room_id)
            self.assertEqual(result['status'], 'created')
        except SFUClientError:
            # Если sfu-server не доступен, пропускаем тест
            self.skipTest("SFU server not available")
    
    def test_get_room(self):
        """Тест получения информации о комнате."""
        client = get_sfu_client()
        room_id = str(uuid.uuid4())
        
        try:
            # Создаем комнату
            client.create_room(room_id)
            
            # Получаем информацию
            result = client.get_room(room_id)
            self.assertIn('room_id', result)
            self.assertEqual(result['room_id'], room_id)
            self.assertIn('peers_count', result)
        except SFUClientError:
            self.skipTest("SFU server not available")
    
    def test_delete_room(self):
        """Тест удаления комнаты."""
        client = get_sfu_client()
        room_id = str(uuid.uuid4())
        
        try:
            # Создаем комнату
            client.create_room(room_id)
            
            # Удаляем комнату
            result = client.delete_room(room_id)
            self.assertIn('room_id', result)
            self.assertEqual(result['status'], 'deleted')
        except SFUClientError:
            self.skipTest("SFU server not available")


class VideoRoomSFUIntegrationTestCase(TestCase):
    """Тесты интеграции VideoRoom с sfu-server."""
    
    def setUp(self):
        """Настройка тестов."""
        self.mentor = User.objects.create_user(
            email='mentor@test.com',
            password='testpass123',
            role='mentor',
            first_name='Test',
            last_name='Mentor'
        )
        self.client_user = User.objects.create_user(
            email='client@test.com',
            password='testpass123',
            role='client',
            first_name='Test',
            last_name='Client'
        )
        
        # Создаем занятие
        self.lesson = Lesson.objects.create(
            mentor=self.mentor,
            client=self.client_user,
            title='Test Lesson',
            start_time='2025-12-10T10:00:00Z',
            duration=60,
            status='confirmed'
        )
    
    def test_video_room_creation_creates_sfu_room(self):
        """Тест что создание VideoRoom создает комнату в sfu-server."""
        try:
            video_room = VideoRoom.objects.create(
                lesson=self.lesson,
                mentor=self.mentor,
                client=self.client_user
            )
            
            # Проверяем что комната создана в sfu-server
            sfu_client = get_sfu_client()
            sfu_room = sfu_client.get_room(str(video_room.room_id))
            
            self.assertEqual(sfu_room['room_id'], str(video_room.room_id))
            self.assertEqual(sfu_room['status'], 'active')
        except SFUClientError:
            self.skipTest("SFU server not available")

