"""Tests for quber.core.models module."""

from quber.core.models import TableMetadata


def test_table_metadata_creation():
    """Test basic TableMetadata creation."""
    metadata = TableMetadata(
        table_index=0,
        page_number=1,
        headers=["Name", "Age", "City"],
    )

    assert metadata.table_index == 0
    assert metadata.page_number == 1
    assert metadata.headers == ["Name", "Age", "City"]
    assert metadata.consolidated_header is None
    assert metadata.descriptive_text is None
    assert metadata.table_markdown is None
    assert metadata.preceding_text is None
    assert metadata.rows == 0
    assert metadata.cols == 0
    assert metadata.first_cell_content is None


def test_table_metadata_with_optional_fields():
    """Test TableMetadata with all optional fields populated."""
    metadata = TableMetadata(
        table_index=1,
        page_number=2,
        headers=["Column A", "Column B"],
        consolidated_header="Financial Summary",
        descriptive_text="Quarterly results for Q4 2024",
        table_markdown="| Column A | Column B |\n|----------|----------|",
        preceding_text="The following table shows...",
        rows=10,
        cols=2,
        first_cell_content="Revenue",
    )

    assert metadata.table_index == 1
    assert metadata.page_number == 2
    assert metadata.headers == ["Column A", "Column B"]
    assert metadata.consolidated_header == "Financial Summary"
    assert metadata.descriptive_text == "Quarterly results for Q4 2024"
    assert metadata.table_markdown == "| Column A | Column B |\n|----------|----------|"
    assert metadata.preceding_text == "The following table shows..."
    assert metadata.rows == 10
    assert metadata.cols == 2
    assert metadata.first_cell_content == "Revenue"


def test_table_metadata_empty_headers():
    """Test TableMetadata with empty headers list."""
    metadata = TableMetadata(
        table_index=0,
        page_number=1,
        headers=[],
    )

    assert metadata.headers == []
    assert len(metadata.headers) == 0


def test_table_metadata_large_values():
    """Test TableMetadata with large row/col counts."""
    metadata = TableMetadata(
        table_index=999,
        page_number=500,
        headers=["H1", "H2", "H3"],
        rows=10000,
        cols=100,
    )

    assert metadata.table_index == 999
    assert metadata.page_number == 500
    assert metadata.rows == 10000
    assert metadata.cols == 100


def test_table_metadata_equality():
    """Test TableMetadata equality comparison."""
    metadata1 = TableMetadata(
        table_index=0,
        page_number=1,
        headers=["A", "B"],
        rows=5,
        cols=2,
    )

    metadata2 = TableMetadata(
        table_index=0,
        page_number=1,
        headers=["A", "B"],
        rows=5,
        cols=2,
    )

    assert metadata1 == metadata2


def test_table_metadata_inequality():
    """Test TableMetadata inequality with different values."""
    metadata1 = TableMetadata(
        table_index=0,
        page_number=1,
        headers=["A", "B"],
    )

    metadata2 = TableMetadata(
        table_index=1,
        page_number=1,
        headers=["A", "B"],
    )

    assert metadata1 != metadata2
