"""
Sprint 33 Tests: Shared app dialogs replace native confirm/prompt usage.

These tests verify the static assets expose the reusable confirm/input modal
and that browser-native confirm/prompt calls are no longer used in the Web UI.
"""

import pathlib
import re


REPO = pathlib.Path(__file__).parent.parent


def read(path):
    return (REPO / path).read_text(encoding="utf-8")


def test_index_has_shared_app_dialog_markup():
    html = read("static/index.html")
    assert 'id="appDialogOverlay"' in html
    assert 'id="appDialog"' in html
    assert 'id="appDialogTitle"' in html
    assert 'id="appDialogDesc"' in html
    assert 'id="appDialogInput"' in html
    assert 'id="appDialogCancel"' in html
    assert 'id="appDialogConfirm"' in html


def test_app_dialog_css_rules_exist():
    css = read("static/style.css")
    for selector in (
        ".app-dialog-overlay",
        ".app-dialog",
        ".app-dialog-input",
        ".app-dialog-actions",
        ".app-dialog-btn.confirm",
        ".app-dialog-btn.confirm.danger",
    ):
        assert selector in css, f"missing CSS selector: {selector}"


def test_ui_js_exposes_shared_dialog_helpers():
    src = read("static/ui.js")
    assert "function showConfirmDialog(opts={})" in src
    assert "function showPromptDialog(opts={})" in src
    assert "document.addEventListener('keydown'" in src


def test_no_native_confirm_calls_remain_in_static_js():
    for path in (REPO / "static").glob("*.js"):
        src = path.read_text(encoding="utf-8")
        assert not re.search(r"\bconfirm\s*\(", src), f"native confirm() remains in {path.name}"


def test_no_native_prompt_calls_remain_in_static_js():
    for path in (REPO / "static").glob("*.js"):
        src = path.read_text(encoding="utf-8")
        assert not re.search(r"\bprompt\s*\(", src), f"native prompt() remains in {path.name}"
