from pydantic import BaseModel, Field


class MuseImageToolEnablement(BaseModel):
    enable_image_search: bool = Field(...)
    enable_web_search: bool = Field(...)
    enable_shell: bool = Field(...)


class MuseImageRequest(BaseModel):
    model: str = Field(...)
    prompt: str = Field(...)
    n: int = Field(1, ge=1, le=10)
    size: str | None = Field(None)
    reasoning_strength: str = Field("high")
    output_format: str = Field("png")
    response_format: str = Field("b64_json")
    tool_enablement: MuseImageToolEnablement | None = Field(None)


class MuseImageInput(BaseModel):
    image_url: str = Field(...)


class MuseImageEditRequest(MuseImageRequest):
    images: list[MuseImageInput] = Field(...)


class MuseImageData(BaseModel):
    b64_json: str | None = Field(None)
    url: str | None = Field(None)


class MuseImageUsage(BaseModel):
    input_tokens: int | None = Field(None)
    output_tokens: int | None = Field(None)
    total_tokens: int | None = Field(None)


class MuseImageResponse(BaseModel):
    created: int | None = Field(None)
    data: list[MuseImageData] = Field(default_factory=list)
    output_format: str | None = Field(None)
    background: str | None = Field(None)
    usage: MuseImageUsage | None = Field(None)
