# Code generated by Lark OpenAPI.

from typing import Any, Optional, Union, Dict, List, Set, IO, Callable, Type
from lark_oapi.core.construct import init


class Style(object):
    _types = {
        "fill_color": str,
        "fill_opacity": float,
        "border_style": str,
        "border_width": str,
        "border_opacity": float,
        "h_flip": bool,
        "v_flip": bool,
        "border_color": str,
        "theme_fill_color_code": int,
        "theme_border_color_code": int,
        "fill_color_type": int,
        "border_color_type": int,
    }

    def __init__(self, d=None):
        self.fill_color: Optional[str] = None
        self.fill_opacity: Optional[float] = None
        self.border_style: Optional[str] = None
        self.border_width: Optional[str] = None
        self.border_opacity: Optional[float] = None
        self.h_flip: Optional[bool] = None
        self.v_flip: Optional[bool] = None
        self.border_color: Optional[str] = None
        self.theme_fill_color_code: Optional[int] = None
        self.theme_border_color_code: Optional[int] = None
        self.fill_color_type: Optional[int] = None
        self.border_color_type: Optional[int] = None
        init(self, d, self._types)

    @staticmethod
    def builder() -> "StyleBuilder":
        return StyleBuilder()


class StyleBuilder(object):
    def __init__(self) -> None:
        self._style = Style()

    def fill_color(self, fill_color: str) -> "StyleBuilder":
        self._style.fill_color = fill_color
        return self

    def fill_opacity(self, fill_opacity: float) -> "StyleBuilder":
        self._style.fill_opacity = fill_opacity
        return self

    def border_style(self, border_style: str) -> "StyleBuilder":
        self._style.border_style = border_style
        return self

    def border_width(self, border_width: str) -> "StyleBuilder":
        self._style.border_width = border_width
        return self

    def border_opacity(self, border_opacity: float) -> "StyleBuilder":
        self._style.border_opacity = border_opacity
        return self

    def h_flip(self, h_flip: bool) -> "StyleBuilder":
        self._style.h_flip = h_flip
        return self

    def v_flip(self, v_flip: bool) -> "StyleBuilder":
        self._style.v_flip = v_flip
        return self

    def border_color(self, border_color: str) -> "StyleBuilder":
        self._style.border_color = border_color
        return self

    def theme_fill_color_code(self, theme_fill_color_code: int) -> "StyleBuilder":
        self._style.theme_fill_color_code = theme_fill_color_code
        return self

    def theme_border_color_code(self, theme_border_color_code: int) -> "StyleBuilder":
        self._style.theme_border_color_code = theme_border_color_code
        return self

    def fill_color_type(self, fill_color_type: int) -> "StyleBuilder":
        self._style.fill_color_type = fill_color_type
        return self

    def border_color_type(self, border_color_type: int) -> "StyleBuilder":
        self._style.border_color_type = border_color_type
        return self

    def build(self) -> "Style":
        return self._style
