"""
Type definitions for the translations data that is stored Remote Settings.
"""

from pydantic import BaseModel, Field
from typing import Optional

prod_endpoint = "https://firefox.settings.services.mozilla.com"
models_collection = "translations-models"
wasm_collection = "translations-wasm"


def get_prod_records_url(collection: str):
    return f"{prod_endpoint}/v1/buckets/main/collections/{collection}/records"


class Attachment(BaseModel):
    """A Remote Settings attachment"""

    hash: str  # "724b358d399c6b23444de36d76e9e2630c7024c29d9e617323b820a11631535a"
    size: int  # 17141051
    filename: str  # "model.enel.intgemm.alphas.bin"
    location: str  # "main-workspace/translations-models/26dead91-e46c-442c-85d0-a6fe13fad55a.bin"
    mimetype: str  # "application/octet-stream"


class WasmRecord(BaseModel):
    """A Remote Settings WasmRecord"""

    name: str
    schema_name: Optional[int] = Field(default=None, alias="schema")
    license: str
    release: str
    version: str
    revision: str
    attachment: Optional[Attachment] = None
    fx_release: Optional[str] = None
    filter_expression: Optional[str] = None
    id: str
    last_modified: int


class WasmResponse(BaseModel):
    """The response from calling the Remote Settings records endpoint."""

    data: list[WasmRecord]


class ModelRecord(BaseModel):
    name: str  # "model.enel.intgemm.alphas.bin"
    schema_name: Optional[int] = Field(default=None, alias="schema")
    variant: Optional[str] = None
    toLang: str  # "en"
    fromLang: str  # "el"
    version: str  # "1.0"
    fileType: str  # "model", "lex", "vocab"
    attachment: Optional[Attachment] = None
    filter_expression: Optional[
        str
    ] = None  # "env.channel == 'default' || env.channel == 'nightly'"
    id: str  # "136b1eae-9cef-4d03-a38f-74b0cb543b74"
    last_modified: int  # 1728419357986


class ModelsResponse(BaseModel):
    """The response from calling the Remote Settings records endpoint."""

    data: list[ModelRecord]
