from dashboard_layout_schema import DashboardLayoutPayload
from dashboard_widget_entitlements import apply_entitlements_to_layout_dict, widget_id_allowed


def test_apply_entitlements_disables_widget_without_access(monkeypatch):
    monkeypatch.setattr(
        "dashboard_widget_entitlements.widget_id_allowed",
        lambda wid, pid, conn: wid != "nutrition_detail_charts",
    )
    raw = {
        "version": 1,
        "widgets": [
            {"id": "welcome", "enabled": True},
            {"id": "nutrition_detail_charts", "enabled": True},
        ],
    }
    out = apply_entitlements_to_layout_dict(raw, "p", None)
    assert {w["id"]: w["enabled"] for w in out["widgets"]} == {
        "welcome": True,
        "nutrition_detail_charts": False,
    }


def test_apply_entitlements_leaves_welcome_on_when_all_blocked(monkeypatch):
    monkeypatch.setattr(
        "dashboard_widget_entitlements.widget_id_allowed",
        lambda wid, pid, conn: False,
    )
    raw = {
        "version": 1,
        "widgets": [
            {"id": "welcome", "enabled": False},
            {"id": "nutrition_detail_charts", "enabled": False},
        ],
    }
    out = apply_entitlements_to_layout_dict(raw, "p", None)
    assert any(w["id"] == "welcome" and w["enabled"] for w in out["widgets"])


def test_widget_id_allowed_false_for_unknown_id():
    assert widget_id_allowed("not-a-widget", "p", None) is False


def test_full_default_layout_still_validates_after_entitlements(monkeypatch):
    monkeypatch.setattr(
        "dashboard_widget_entitlements.widget_id_allowed",
        lambda wid, pid, conn: wid != "ai_pipeline_insight",
    )
    from dashboard_layout_schema import default_layout_dict

    d = default_layout_dict()
    d["widgets"] = [{**x, "enabled": x["id"] == "ai_pipeline_insight"} for x in d["widgets"]]
    adj = apply_entitlements_to_layout_dict(d, "p", None)
    p2 = DashboardLayoutPayload.model_validate(adj)
    ai = next(w for w in p2.widgets if w.id == "ai_pipeline_insight")
    assert ai.enabled is False
    assert any(w.enabled for w in p2.widgets)
