from decimal import Decimal

from django.contrib.auth import get_user_model
from django.test import TestCase
from rest_framework.authtoken.models import Token
from rest_framework.test import APIClient

from accounts.models import KYCDocument, TransporterProfile, UserRole, Vehicle

User = get_user_model()


class TransporterOwnProfileApiTests(TestCase):
    def setUp(self):
        self.driver = User.objects.create_user(
            'own-prof@test.com',
            email='own-prof@test.com',
            password='secret',
        )
        UserRole.objects.create(user=self.driver, role=UserRole.Role.TRANSPORTER, phone='', language='en')
        TransporterProfile.objects.create(
            user=self.driver,
            account_type=TransporterProfile.AccountType.DRIVER,
            local=True,
            country_to_country=False,
        )
        self.vehicle = Vehicle.objects.create(
            owner=self.driver,
            vehicle_type='Flatbed',
            registration_number='REG-OWN-1',
            load_capacity=Decimal('3000.00'),
            is_active=True,
            is_verified=True,
        )
        token, _ = Token.objects.get_or_create(user=self.driver)
        self.client = APIClient()
        self.client.credentials(HTTP_AUTHORIZATION=f'Bearer {token.key}')

    def test_profile_includes_vehicle(self):
        r = self.client.get('/api/transporter/profile/')
        self.assertEqual(r.status_code, 200)
        data = r.json()['data']
        self.assertEqual(data['vehicle']['id'], self.vehicle.id)
        self.assertEqual(data['vehicle']['registration_number'], 'REG-OWN-1')
        self.assertEqual(len(data['vehicles']), 1)
        self.assertEqual(data['vehicles'][0]['id'], self.vehicle.id)
        self.assertEqual(data['gcc_id'], '')

    def test_profile_includes_gcc_id_from_kyc(self):
        KYCDocument.objects.create(
            user=self.driver,
            document_type=KYCDocument.DocumentType.COUNTRY_GCC,
            gcc_country='AE',
            file='kyc/test-front.png',
            file_back='kyc/test-back.png',
        )
        r = self.client.get('/api/transporter/profile/')
        self.assertEqual(r.status_code, 200)
        self.assertEqual(r.json()['data']['gcc_id'], 'AE')
