"""Typed executable Todo2-9 composition evidence contract."""

from __future__ import annotations

from typing import ClassVar

from pydantic import BaseModel, ConfigDict, Field


class CompositionMember(BaseModel):
    model_config: ClassVar[ConfigDict] = ConfigDict(frozen=True, extra="forbid")

    path: str
    sha256: str


class CompositionGroup(BaseModel):
    model_config: ClassVar[ConfigDict] = ConfigDict(frozen=True, extra="forbid")

    id: str
    capabilities: tuple[str, ...]
    cwd: str
    env: dict[str, str]
    argv: tuple[str, ...]
    test_paths: tuple[str, ...]
    nodeids_member: CompositionMember
    collection_count: int
    command_sha256: str
    members: tuple[CompositionMember, ...]
    expected_exit: int
    expected_passed: int
    isolation_policy: str


class CompositionManifest(BaseModel):
    model_config: ClassVar[ConfigDict] = ConfigDict(frozen=True, extra="forbid")

    schema_name: str = Field(alias="schema")
    repository: str
    runner_members: tuple[CompositionMember, ...]
    groups: tuple[CompositionGroup, ...]