"""Denied weekly owner-draft authority variants."""

from __future__ import annotations

from dataclasses import replace
from copy import copy
from datetime import datetime
from pathlib import Path

import pytest

from gateway.platforms.nutrition_weekly_owner_draft import WeeklyOwnerDraftService
from tests.gateway.test_nutrition_weekly_owner_draft_model import (
    FakeLifecycle,
    SequenceModel,
    owner_draft_request,
)


@pytest.mark.parametrize("change", ("day", "owner", "consent", "candidate", "customer", "stale"))
def test_wrong_authority_and_stale_grounding_fail_before_provider(
    tmp_path: Path,
    change: str,
) -> None:
    lifecycle = FakeLifecycle(tmp_path)
    request = owner_draft_request(lifecycle)
    if change == "day":
        request = replace(request, runtime=replace(request.runtime, now=datetime.fromisoformat("2026-08-25T08:00:00+09:00")))
    elif change == "owner":
        request = replace(request, owner_key=("other", "owner-dm", "owner"))
    elif change == "consent":
        request = replace(request, runtime=replace(request.runtime, consent_granted=False))
    elif change == "candidate":
        request = replace(request, runtime=replace(request.runtime, candidate_digest="c" * 64))
    elif change == "customer":
        request = replace(request, customer_key="other")
    else:
        stale = copy(request.bound_summary)
        object.__setattr__(stale, "summary_digest", "f" * 64)
        request = replace(request, current_bound_summary=lambda: stale)
    model = SequenceModel(())

    result = WeeklyOwnerDraftService(lifecycle, model).create(request)

    assert (result.accepted, result.provider_calls, model.calls) == (False, 0, 0)
