"""DelegateRequest schema must enforce TASK_AT_CREATE field constraints."""

from __future__ import annotations

from uuid import uuid4

import pytest
from pydantic import ValidationError
from roboco.api.schemas.v1.flow import DelegateRequest


def _ok_payload() -> dict:
    return {
        "parent_task_id": uuid4(),
        "title": "Add user lookup endpoint",
        "description": (
            "Add GET /v1/users/{id} returning the user JSON for the dashboard."
        ),
        "assigned_to": "be-dev-1",
        "team": "backend",
        "task_type": "code",
        "nature": "technical",
        "estimated_complexity": "medium",
        "acceptance_criteria": [
            "returns 404 for unknown user",
            "returns 200 + user JSON for known user",
        ],
    }


def test_delegate_request_accepts_complete_payload() -> None:
    DelegateRequest(**_ok_payload())


def test_delegate_request_rejects_empty_acceptance_criteria() -> None:
    payload = _ok_payload()
    payload["acceptance_criteria"] = []
    with pytest.raises(ValidationError) as exc_info:
        DelegateRequest(**payload)
    assert "acceptance_criteria" in str(exc_info.value)


def test_delegate_request_rejects_missing_acceptance_criteria() -> None:
    payload = _ok_payload()
    del payload["acceptance_criteria"]
    with pytest.raises(ValidationError):
        DelegateRequest(**payload)


def test_delegate_request_rejects_missing_nature() -> None:
    payload = _ok_payload()
    del payload["nature"]
    with pytest.raises(ValidationError):
        DelegateRequest(**payload)


def test_delegate_request_rejects_missing_estimated_complexity() -> None:
    payload = _ok_payload()
    del payload["estimated_complexity"]
    with pytest.raises(ValidationError):
        DelegateRequest(**payload)


def test_delegate_request_rejects_short_description() -> None:
    payload = _ok_payload()
    payload["description"] = "x"
    with pytest.raises(ValidationError):
        DelegateRequest(**payload)
