from django.test import TestCase
from django.contrib.auth import get_user_model
from apps.companies.models import Company
from apps.permissions.models import Role, Permission, UserCompanyRole

User = get_user_model()


class MultipleCompaniesSimpleTestCase(TestCase):
    """Simple test case for multiple companies functionality"""
    
    def setUp(self):
        """Set up test data"""
        # Create test companies
        self.company_a = Company.objects.create(
            name='Company A',
            phone='1234567890',
            is_active=True
        )
        self.company_b = Company.objects.create(
            name='Company B',
            phone='0987654321',
            is_active=True
        )
        
        # Create test user
        self.user = User.objects.create_user(
            username='testuser',
            email='test@example.com',
            password='testpass123',
            user_type='user'
        )
        
        # Add user to both companies
        self.user.companies.add(self.company_a, self.company_b)
        self.user.active_company = self.company_a
        self.user.save()
        
        # Create roles
        self.role_a = Role.objects.create(
            name='Manager',
            company=self.company_a,
            description='Manager in Company A'
        )
        self.role_b = Role.objects.create(
            name='Employee',
            company=self.company_b,
            description='Employee in Company B'
        )
        
        # Create permissions
        self.permission = Permission.objects.create(
            name='View Users',
            codename='view_users'
        )
        
        # Assign permissions to roles
        self.role_a.permissions.add(self.permission)
        self.role_b.permissions.add(self.permission)
        
        # Create UserCompanyRole relationships
        UserCompanyRole.objects.create(
            user=self.user,
            company=self.company_a,
            role=self.role_a
        )
        UserCompanyRole.objects.create(
            user=self.user,
            company=self.company_b,
            role=self.role_b
        )

    def test_user_belongs_to_multiple_companies(self):
        """Test that user belongs to multiple companies"""
        self.assertTrue(self.user.belongs_to_company(self.company_a))
        self.assertTrue(self.user.belongs_to_company(self.company_b))
        self.assertEqual(self.user.companies.count(), 2)

    def test_user_has_active_company(self):
        """Test that user has an active company"""
        self.assertEqual(self.user.active_company, self.company_a)
        self.assertEqual(self.user.get_active_company_name(), 'Company A')

    def test_user_can_switch_companies(self):
        """Test that user can switch between companies"""
        # Switch to company B
        success = self.user.switch_company(self.company_b)
        self.assertTrue(success)
        self.assertEqual(self.user.active_company, self.company_b)

    def test_user_has_different_roles_in_different_companies(self):
        """Test that user has different roles in different companies"""
        role_a = self.user.get_role_in_company(self.company_a)
        role_b = self.user.get_role_in_company(self.company_b)
        
        self.assertEqual(role_a.name, 'Manager')
        self.assertEqual(role_b.name, 'Employee')

    def test_user_permissions_are_company_specific(self):
        """Test that user permissions are specific to active company"""
        # In Company A context
        self.user.active_company = self.company_a
        self.user.save()
        self.assertTrue(self.user.has_company_permission('view_users'))
        
        # In Company B context
        self.user.active_company = self.company_b
        self.user.save()
        self.assertTrue(self.user.has_company_permission('view_users')) 