# pylint: disable=missing-docstring,unused-argument,multiple-statements
import enum
from typing import Dict
from typing import Optional

from beancount.core.number import Decimal

class Precision(enum.Enum):
    MOST_COMMON: int = ...
    MAXIMUM: int = ...

class Align(enum.Enum):
    NATURAL: int = ...
    DOT: int = ...
    RIGHT: int = ...

class _CurrencyContext:
    has_sign: bool = ...
    integer_max: int = ...
    # fractional_dist: Any = ...
    def __init__(self) -> None: ...
    def update(self, number: Decimal) -> None: ...
    def get_fractional(self, precision: Precision) -> Optional[int]: ...

class DisplayContext:
    ccontexts: Dict[str, _CurrencyContext] = ...
    commas: bool = ...
    def __init__(self) -> None: ...
    # def set_commas(self, commas: Any) -> None: ...
    # def update(self, number: Any, currency: str = ...) -> None: ...
    # def quantize(self, number: Any, currency: str,
    #  precision: Precision = ...): ...
    # def build(
    # self,
    # alignment: Any = ...,
    # precision: Any = ...,
    # commas: Optional[Any] = ...,
    # reserved: int = ...,
    # ): ...
    # DEFAULT_UNINITIALIZED_PRECISION: int = ...

# class DisplayFormatter:
#     dcontext: Any = ...
#     precision: Any = ...
#     fmtstrings: Any = ...
#     fmtfuncs: Any = ...
#     def __init__(
#         self, dcontext: Any, precision: Any, fmtstrings: Any
#     ) -> None: ...
#     def format(self, number: Any, currency: str = ...): ...
#     def quantize(self, number: Any, currency: str = ...): ...
#     __call__: Any = ...

# DEFAULT_DISPLAY_CONTEXT: Any
# DEFAULT_FORMATTER: Any
