# Code generated by Lark OpenAPI.

from typing import Any, Optional, Union, Dict, List, Set, IO, Callable, Type
from lark_oapi.core.construct import init
from .id_with_name import IdWithName
from .id_with_name import IdWithName
from .id_with_name import IdWithName
from .verif_pay_calendar import VerifPayCalendar
from .id_with_name import IdWithName
from .verif_datasource_config import VerifDatasourceConfig


class VerificationPlan(object):
    _types = {
        "plan_id": str,
        "version_id": str,
        "time_zone": str,
        "is_active": bool,
        "effective_period_seq": str,
        "name": IdWithName,
        "country_region_id": IdWithName,
        "currency_id": IdWithName,
        "calendar_type": int,
        "pay_calendars": List[VerifPayCalendar],
        "scope_type": int,
        "pay_groups": List[IdWithName],
        "datasource_config": VerifDatasourceConfig,
        "approval_type": int,
        "ovbservers": List[str],
        "admins": List[str],
        "reviewers": List[str],
        "plan_type": int,
        "update_time": int,
    }

    def __init__(self, d=None):
        self.plan_id: Optional[str] = None
        self.version_id: Optional[str] = None
        self.time_zone: Optional[str] = None
        self.is_active: Optional[bool] = None
        self.effective_period_seq: Optional[str] = None
        self.name: Optional[IdWithName] = None
        self.country_region_id: Optional[IdWithName] = None
        self.currency_id: Optional[IdWithName] = None
        self.calendar_type: Optional[int] = None
        self.pay_calendars: Optional[List[VerifPayCalendar]] = None
        self.scope_type: Optional[int] = None
        self.pay_groups: Optional[List[IdWithName]] = None
        self.datasource_config: Optional[VerifDatasourceConfig] = None
        self.approval_type: Optional[int] = None
        self.ovbservers: Optional[List[str]] = None
        self.admins: Optional[List[str]] = None
        self.reviewers: Optional[List[str]] = None
        self.plan_type: Optional[int] = None
        self.update_time: Optional[int] = None
        init(self, d, self._types)

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


class VerificationPlanBuilder(object):
    def __init__(self) -> None:
        self._verification_plan = VerificationPlan()

    def plan_id(self, plan_id: str) -> "VerificationPlanBuilder":
        self._verification_plan.plan_id = plan_id
        return self

    def version_id(self, version_id: str) -> "VerificationPlanBuilder":
        self._verification_plan.version_id = version_id
        return self

    def time_zone(self, time_zone: str) -> "VerificationPlanBuilder":
        self._verification_plan.time_zone = time_zone
        return self

    def is_active(self, is_active: bool) -> "VerificationPlanBuilder":
        self._verification_plan.is_active = is_active
        return self

    def effective_period_seq(self, effective_period_seq: str) -> "VerificationPlanBuilder":
        self._verification_plan.effective_period_seq = effective_period_seq
        return self

    def name(self, name: IdWithName) -> "VerificationPlanBuilder":
        self._verification_plan.name = name
        return self

    def country_region_id(self, country_region_id: IdWithName) -> "VerificationPlanBuilder":
        self._verification_plan.country_region_id = country_region_id
        return self

    def currency_id(self, currency_id: IdWithName) -> "VerificationPlanBuilder":
        self._verification_plan.currency_id = currency_id
        return self

    def calendar_type(self, calendar_type: int) -> "VerificationPlanBuilder":
        self._verification_plan.calendar_type = calendar_type
        return self

    def pay_calendars(self, pay_calendars: List[VerifPayCalendar]) -> "VerificationPlanBuilder":
        self._verification_plan.pay_calendars = pay_calendars
        return self

    def scope_type(self, scope_type: int) -> "VerificationPlanBuilder":
        self._verification_plan.scope_type = scope_type
        return self

    def pay_groups(self, pay_groups: List[IdWithName]) -> "VerificationPlanBuilder":
        self._verification_plan.pay_groups = pay_groups
        return self

    def datasource_config(self, datasource_config: VerifDatasourceConfig) -> "VerificationPlanBuilder":
        self._verification_plan.datasource_config = datasource_config
        return self

    def approval_type(self, approval_type: int) -> "VerificationPlanBuilder":
        self._verification_plan.approval_type = approval_type
        return self

    def ovbservers(self, ovbservers: List[str]) -> "VerificationPlanBuilder":
        self._verification_plan.ovbservers = ovbservers
        return self

    def admins(self, admins: List[str]) -> "VerificationPlanBuilder":
        self._verification_plan.admins = admins
        return self

    def reviewers(self, reviewers: List[str]) -> "VerificationPlanBuilder":
        self._verification_plan.reviewers = reviewers
        return self

    def plan_type(self, plan_type: int) -> "VerificationPlanBuilder":
        self._verification_plan.plan_type = plan_type
        return self

    def update_time(self, update_time: int) -> "VerificationPlanBuilder":
        self._verification_plan.update_time = update_time
        return self

    def build(self) -> "VerificationPlan":
        return self._verification_plan
