"""Validate job configuration before starting an operation."""

from dataclasses import dataclass
from typing import Annotated, TypeAlias, assert_never, final

from pydantic import BaseModel, ConfigDict, Field, StringConstraints, ValidationError


class JobMetadata(BaseModel):
    """Require a job name and a positive worker count."""

    model_config = ConfigDict(strict=True, extra="ignore")
    name: Annotated[str, StringConstraints(pattern=r"\S")]
    workers: Annotated[int, Field(ge=1)]


@final
@dataclass(frozen=True, slots=True)
class InvalidMetadata:
    """Carry a validation failure for a rejected job record."""

    reason: str


MetadataResult: TypeAlias = JobMetadata | InvalidMetadata


def parse_metadata(payload: str) -> MetadataResult:
    """Validate startup JSON and return either the record or its rejection."""
    try:
        return JobMetadata.model_validate_json(payload)
    except ValidationError as error:
        return InvalidMetadata(str(error))


outcome = parse_metadata('{"name": "report", "workers": 4}')
match outcome:
    case JobMetadata(workers=workers):
        pass
    case InvalidMetadata():
        pass
    case _:
        assert_never(outcome)
# rejected[missing-attribute]: workers = JobMetadata(name="report", workers=4).worker_count
# rejected[missing-attribute]: workers = outcome.workers
# rejected[bad-argument-type]: parse_metadata({})
