# 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 .custom_field_data import CustomFieldData


class SubmitProbationRequestBody(object):
    _types = {
        "employment_id": str,
        "conversion_mode": int,
        "actual_probation_end_date": str,
        "submission_type": str,
        "initiator_id": str,
        "notes": str,
        "self_review": str,
        "custom_fields": List[CustomFieldData],
    }

    def __init__(self, d=None):
        self.employment_id: Optional[str] = None
        self.conversion_mode: Optional[int] = None
        self.actual_probation_end_date: Optional[str] = None
        self.submission_type: Optional[str] = None
        self.initiator_id: Optional[str] = None
        self.notes: Optional[str] = None
        self.self_review: Optional[str] = None
        self.custom_fields: Optional[List[CustomFieldData]] = None
        init(self, d, self._types)

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


class SubmitProbationRequestBodyBuilder(object):
    def __init__(self) -> None:
        self._submit_probation_request_body = SubmitProbationRequestBody()

    def employment_id(self, employment_id: str) -> "SubmitProbationRequestBodyBuilder":
        self._submit_probation_request_body.employment_id = employment_id
        return self

    def conversion_mode(self, conversion_mode: int) -> "SubmitProbationRequestBodyBuilder":
        self._submit_probation_request_body.conversion_mode = conversion_mode
        return self

    def actual_probation_end_date(self, actual_probation_end_date: str) -> "SubmitProbationRequestBodyBuilder":
        self._submit_probation_request_body.actual_probation_end_date = actual_probation_end_date
        return self

    def submission_type(self, submission_type: str) -> "SubmitProbationRequestBodyBuilder":
        self._submit_probation_request_body.submission_type = submission_type
        return self

    def initiator_id(self, initiator_id: str) -> "SubmitProbationRequestBodyBuilder":
        self._submit_probation_request_body.initiator_id = initiator_id
        return self

    def notes(self, notes: str) -> "SubmitProbationRequestBodyBuilder":
        self._submit_probation_request_body.notes = notes
        return self

    def self_review(self, self_review: str) -> "SubmitProbationRequestBodyBuilder":
        self._submit_probation_request_body.self_review = self_review
        return self

    def custom_fields(self, custom_fields: List[CustomFieldData]) -> "SubmitProbationRequestBodyBuilder":
        self._submit_probation_request_body.custom_fields = custom_fields
        return self

    def build(self) -> "SubmitProbationRequestBody":
        return self._submit_probation_request_body
