# 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 AttendanceRule(object):
    _types = {
        "rule_id": str,
        "name": str,
        "shift_rotation_type": int,
        "need_photo": bool,
        "allow_field": bool,
        "allow_remedy": bool,
        "allow_pc": bool,
        "need_risk": bool,
    }

    def __init__(self, d=None):
        self.rule_id: Optional[str] = None
        self.name: Optional[str] = None
        self.shift_rotation_type: Optional[int] = None
        self.need_photo: Optional[bool] = None
        self.allow_field: Optional[bool] = None
        self.allow_remedy: Optional[bool] = None
        self.allow_pc: Optional[bool] = None
        self.need_risk: Optional[bool] = None
        init(self, d, self._types)

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


class AttendanceRuleBuilder(object):
    def __init__(self) -> None:
        self._attendance_rule = AttendanceRule()

    def rule_id(self, rule_id: str) -> "AttendanceRuleBuilder":
        self._attendance_rule.rule_id = rule_id
        return self

    def name(self, name: str) -> "AttendanceRuleBuilder":
        self._attendance_rule.name = name
        return self

    def shift_rotation_type(self, shift_rotation_type: int) -> "AttendanceRuleBuilder":
        self._attendance_rule.shift_rotation_type = shift_rotation_type
        return self

    def need_photo(self, need_photo: bool) -> "AttendanceRuleBuilder":
        self._attendance_rule.need_photo = need_photo
        return self

    def allow_field(self, allow_field: bool) -> "AttendanceRuleBuilder":
        self._attendance_rule.allow_field = allow_field
        return self

    def allow_remedy(self, allow_remedy: bool) -> "AttendanceRuleBuilder":
        self._attendance_rule.allow_remedy = allow_remedy
        return self

    def allow_pc(self, allow_pc: bool) -> "AttendanceRuleBuilder":
        self._attendance_rule.allow_pc = allow_pc
        return self

    def need_risk(self, need_risk: bool) -> "AttendanceRuleBuilder":
        self._attendance_rule.need_risk = need_risk
        return self

    def build(self) -> "AttendanceRule":
        return self._attendance_rule
