from django.contrib.auth import get_user_model
from django.test import TestCase
from rest_framework.test import APIClient

from shop_management.models.data.shop import Shop
from shop_management.models.data.utils import Currency


class CurrencyBranchDefaultTests(TestCase):
    def setUp(self):
        User = get_user_model()
        self.user = User.objects.create_user(
            username="single-branch-currency-user",
            password="x",
            is_staff=True,
            allowed_tabs=["currencies"],
        )
        self.shop = Shop.objects.create(owner=self.user, name="Third Demo Branch")
        self.client = APIClient()
        self.client.force_authenticate(self.user)

    def test_currency_auto_uses_users_only_branch_when_shop_is_omitted(self):
        response = self.client.post(
            "/api/shop/currencies/",
            {"title": "Afghani", "description": "AFN"},
            format="json",
            HTTP_HOST="localhost",
        )
        self.assertEqual(response.status_code, 201)
        self.assertEqual(Currency.objects.get().shop, self.shop)

    def test_duplicate_currency_name_in_same_branch_is_rejected_case_insensitively(self):
        Currency.objects.create(shop=self.shop, title="Afghani")
        response = self.client.post(
            "/api/shop/currencies/",
            {"title": "  afghani  "},
            format="json",
            HTTP_HOST="localhost",
        )
        self.assertEqual(response.status_code, 400)
        self.assertIn("title", response.data)
