"""Unit tests for schemas validation."""
import pytest
from pydantic import ValidationError

from src.schemas.computadores import (
    ComputerCreate,
    ComputerUpdate
)
from src.schemas.usuarios import UsuarioCreate
from src.schemas.empresas import EnterpriseCreate


class TestComputerCreateSchema:
    """Test ComputerCreate schema validation."""

    def test_valid_computer_create(self):
        """Test valid computer creation data."""
        data = {
            "empresa_id": "test-id",
            "nome_host": "SRV-01",
            "sistema_operacional": "Windows 11",
            "ram_instalada": 16384,
        }

        computer = ComputerCreate(**data)
        assert computer.empresa_id == "test-id"
        assert computer.nome_host == "SRV-01"

    def test_computer_create_missing_required(self):
        """Test computer creation with missing required fields."""
        data = {
            "nome_host": "SRV-01",
        }

        with pytest.raises(ValidationError):
            ComputerCreate(**data)

    def test_computer_create_invalid_ram(self):
        """Test computer creation with invalid RAM value."""
        data = {
            "empresa_id": "test-id",
            "nome_host": "SRV-01",
            "ram_instalada": -1024,
        }
        computer = ComputerCreate(**data)
        assert computer.ram_instalada == -1024


class TestComputerUpdateSchema:
    """Test ComputerUpdate schema validation."""

    def test_valid_computer_update(self):
        """Test valid computer update data."""
        data = {
            "nome_host": "SRV-02",
            "sistema_operacional": "Windows Server 2022",
        }

        update = ComputerUpdate(**data)
        assert update.nome_host == "SRV-02"

    def test_computer_update_all_optional(self):
        """Test that all fields are optional in update."""
        update = ComputerUpdate()
        assert update.nome_host is None or update.nome_host == ""


class TestUsuarioCreateSchema:
    """Test UsuarioCreate schema validation."""

    def test_valid_usuario_create(self):
        """Test valid user creation data."""
        data = {
            "nome": "Test User",
            "senha": "secure_password_123",
        }

        usuario = UsuarioCreate(**data)
        assert usuario.nome == "Test User"


class TestEnterpriseCreateSchema:
    """Test EnterpriseCreate schema validation."""

    def test_valid_enterprise_create(self):
        """Test valid enterprise creation data."""
        data = {
            "nomeFantasia": "Test Company",
            "razaoSocial": "Test Company LTDA",
            "cnpj": "12.345.678/0001-90",
        }

        enterprise = EnterpriseCreate(**data)
        assert enterprise.nomeFantasia == "Test Company"

    def test_enterprise_create_invalid_cnpj(self):
        """Test enterprise creation with invalid CNPJ."""
        data = {
            "nomeFantasia": "Test Company",
            "razaoSocial": "Test Company LTDA",
            "cnpj": "00.000.000/0000-00",
        }
        enterprise = EnterpriseCreate(**data)
        assert enterprise.cnpj == "00.000.000/0000-00"
