# Copyright (c) 2023-present Pi Dash Software, Inc. and contributors
# SPDX-License-Identifier: AGPL-3.0-only
# See the LICENSE file for details.

import uuid
import pytest
from pi_dash.utils.uuid import is_valid_uuid, convert_uuid_to_integer


@pytest.mark.unit
class TestUUIDUtils:
    """Test the UUID utilities"""

    def test_is_valid_uuid_with_valid_uuid(self):
        """Test is_valid_uuid with a valid UUID"""
        # Generate a valid UUID
        valid_uuid = str(uuid.uuid4())
        assert is_valid_uuid(valid_uuid) is True

    def test_is_valid_uuid_with_invalid_uuid(self):
        """Test is_valid_uuid with invalid UUID strings"""
        # Test with different invalid formats
        assert is_valid_uuid("not-a-uuid") is False
        assert is_valid_uuid("123456789") is False
        assert is_valid_uuid("") is False
        assert is_valid_uuid("00000000-0000-0000-0000-000000000000") is False  # This is a valid UUID but version 1

    def test_convert_uuid_to_integer(self):
        """Test convert_uuid_to_integer function"""
        # Create a known UUID
        test_uuid = uuid.UUID("f47ac10b-58cc-4372-a567-0e02b2c3d479")

        # Convert to integer
        result = convert_uuid_to_integer(test_uuid)

        # Check that the result is an integer
        assert isinstance(result, int)

        # Ensure consistent results with the same input
        assert convert_uuid_to_integer(test_uuid) == result

        # Different UUIDs should produce different integers
        different_uuid = uuid.UUID("550e8400-e29b-41d4-a716-446655440000")
        assert convert_uuid_to_integer(different_uuid) != result

    def test_convert_uuid_to_integer_string_input(self):
        """Test convert_uuid_to_integer handles string UUID"""
        # Test with a UUID string
        test_uuid_str = "f47ac10b-58cc-4372-a567-0e02b2c3d479"
        test_uuid = uuid.UUID(test_uuid_str)

        # Should get the same result whether passing UUID or string
        assert convert_uuid_to_integer(test_uuid) == convert_uuid_to_integer(test_uuid_str)
