from typing import TypedDict

from pydantic import BaseModel, Field, model_validator


class I18nObjectDict(TypedDict):
    zh_Hans: str | None
    en_US: str
    pt_BR: str | None
    ja_JP: str | None


class I18nObject(BaseModel):
    """
    Model class for i18n object.
    """

    en_US: str
    zh_Hans: str | None = Field(default=None)
    pt_BR: str | None = Field(default=None)
    ja_JP: str | None = Field(default=None)

    @model_validator(mode="after")
    def _populate_missing_locales(self):
        self.zh_Hans = self.zh_Hans or self.en_US
        self.pt_BR = self.pt_BR or self.en_US
        self.ja_JP = self.ja_JP or self.en_US
        return self

    def to_dict(self) -> I18nObjectDict:
        result: I18nObjectDict = {
            "zh_Hans": self.zh_Hans,
            "en_US": self.en_US,
            "pt_BR": self.pt_BR,
            "ja_JP": self.ja_JP,
        }
        return result
