# 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 .verif_act_item_value import VerifActItemValue
from .verif_act_proration import VerifActProration


class VerificationActivityRow(object):
    _types = {
        "row_id": str,
        "employment_id": str,
        "activity_id": str,
        "employee_number": str,
        "employee_id": str,
        "working_hours_type": IdWithName,
        "pay_group": IdWithName,
        "start_date": str,
        "end_date": str,
        "cutoff_date": str,
        "item_values": List[VerifActItemValue],
        "prorations": List[VerifActProration],
    }

    def __init__(self, d=None):
        self.row_id: Optional[str] = None
        self.employment_id: Optional[str] = None
        self.activity_id: Optional[str] = None
        self.employee_number: Optional[str] = None
        self.employee_id: Optional[str] = None
        self.working_hours_type: Optional[IdWithName] = None
        self.pay_group: Optional[IdWithName] = None
        self.start_date: Optional[str] = None
        self.end_date: Optional[str] = None
        self.cutoff_date: Optional[str] = None
        self.item_values: Optional[List[VerifActItemValue]] = None
        self.prorations: Optional[List[VerifActProration]] = None
        init(self, d, self._types)

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


class VerificationActivityRowBuilder(object):
    def __init__(self) -> None:
        self._verification_activity_row = VerificationActivityRow()

    def row_id(self, row_id: str) -> "VerificationActivityRowBuilder":
        self._verification_activity_row.row_id = row_id
        return self

    def employment_id(self, employment_id: str) -> "VerificationActivityRowBuilder":
        self._verification_activity_row.employment_id = employment_id
        return self

    def activity_id(self, activity_id: str) -> "VerificationActivityRowBuilder":
        self._verification_activity_row.activity_id = activity_id
        return self

    def employee_number(self, employee_number: str) -> "VerificationActivityRowBuilder":
        self._verification_activity_row.employee_number = employee_number
        return self

    def employee_id(self, employee_id: str) -> "VerificationActivityRowBuilder":
        self._verification_activity_row.employee_id = employee_id
        return self

    def working_hours_type(self, working_hours_type: IdWithName) -> "VerificationActivityRowBuilder":
        self._verification_activity_row.working_hours_type = working_hours_type
        return self

    def pay_group(self, pay_group: IdWithName) -> "VerificationActivityRowBuilder":
        self._verification_activity_row.pay_group = pay_group
        return self

    def start_date(self, start_date: str) -> "VerificationActivityRowBuilder":
        self._verification_activity_row.start_date = start_date
        return self

    def end_date(self, end_date: str) -> "VerificationActivityRowBuilder":
        self._verification_activity_row.end_date = end_date
        return self

    def cutoff_date(self, cutoff_date: str) -> "VerificationActivityRowBuilder":
        self._verification_activity_row.cutoff_date = cutoff_date
        return self

    def item_values(self, item_values: List[VerifActItemValue]) -> "VerificationActivityRowBuilder":
        self._verification_activity_row.item_values = item_values
        return self

    def prorations(self, prorations: List[VerifActProration]) -> "VerificationActivityRowBuilder":
        self._verification_activity_row.prorations = prorations
        return self

    def build(self) -> "VerificationActivityRow":
        return self._verification_activity_row
