from __future__ import annotations

from typing import Optional
from uuid import UUID

from pydantic import BaseModel, Field, model_validator


class NeverSuggestCreate(BaseModel):
    family_profile_id: UUID
    ingredient_id: Optional[UUID] = None
    recipe_id: Optional[UUID] = None
    reason: Optional[str] = Field(default=None, max_length=50)
    notes: Optional[str] = None

    @model_validator(mode="after")
    def _exactly_one_target(self) -> "NeverSuggestCreate":
        present = sum(x is not None for x in (self.ingredient_id, self.recipe_id))
        if present != 1:
            raise ValueError("exactly one of ingredient_id or recipe_id must be set")
        return self


class NeverSuggestRead(BaseModel):
    id: UUID
    family_profile_id: UUID
    ingredient_id: Optional[UUID] = None
    recipe_id: Optional[UUID] = None
    reason: Optional[str] = None
    notes: Optional[str] = None

    model_config = {"from_attributes": True}
