"""
Regression test for PR #1071: approval card must render above the queue flyout.

Both `.approval-card` and `.queue-card` are siblings inside `.composer-flyout`
and share the same absolute positioning slot just above the composer. When
both are visible at the same time (queue flyout open + tool approval card
sliding up) the approval card MUST win the stacking order so its security-
relevant Allow / Deny buttons stay clickable.

The old CSS had `.queue-card { z-index: 2 }` and no z-index on
`.approval-card.visible`, so the queue card painted on top and blocked the
approval buttons. The fix raises `.approval-card.visible` to z-index 3.

This test pins the invariant: approval-card.visible z-index must be strictly
greater than queue-card z-index.
"""
import re
from pathlib import Path

CSS = Path("static/style.css").read_text(encoding="utf-8")


def _z_index_of(selector_regex: str) -> int | None:
    m = re.search(selector_regex + r"\s*\{[^}]*z-index:(\d+)", CSS)
    return int(m.group(1)) if m else None


def test_approval_card_visible_outranks_queue_card():
    queue_z = _z_index_of(r"\.queue-card")
    approval_visible_z = _z_index_of(r"\.approval-card\.visible")
    assert queue_z is not None, ".queue-card must declare a z-index"
    assert approval_visible_z is not None, (
        ".approval-card.visible must declare a z-index — without it, the approval "
        "buttons get covered by the queue flyout (PR #1071)"
    )
    assert approval_visible_z > queue_z, (
        f".approval-card.visible z-index ({approval_visible_z}) must be strictly "
        f"greater than .queue-card z-index ({queue_z}) so approval buttons "
        f"remain clickable when both flyouts are open."
    )


def test_approval_card_visible_outranks_terminal_card():
    terminal_z = _z_index_of(r"\.composer-terminal-panel")
    approval_visible_z = _z_index_of(r"\.approval-card\.visible")
    assert terminal_z is not None, ".composer-terminal-panel must declare a z-index"
    assert approval_visible_z is not None
    assert approval_visible_z > terminal_z, (
        f".approval-card.visible z-index ({approval_visible_z}) must stay above "
        f".composer-terminal-panel z-index ({terminal_z}) so approval controls "
        f"remain clickable when the terminal flyout is open."
    )
