# This file was generated by liblab | https://liblab.com/

from __future__ import annotations
from enum import Enum
from typing import List
from .utils.json_map import JsonMap
from .base import BaseModel
from .timesheet_id_items import TimesheetIdItems, TimesheetIdItemsGuard


class InvoiceAdjustmentReviewsToCreateStatus(Enum):
    """An enumeration representing different categories.

    :cvar APPROVED: "approved"
    :vartype APPROVED: str
    :cvar DECLINED: "declined"
    :vartype DECLINED: str
    """

    APPROVED = "approved"
    DECLINED = "declined"

    def list():
        """Lists all category values.

        :return: A list of all category values.
        :rtype: list
        """
        return list(
            map(
                lambda x: x.value,
                InvoiceAdjustmentReviewsToCreateStatus._member_map_.values(),
            )
        )


@JsonMap({})
class InvoiceAdjustmentReviewsToCreate(BaseModel):
    """InvoiceAdjustmentReviewsToCreate

    :param status: status
    :type status: InvoiceAdjustmentReviewsToCreateStatus
    :param reason: reason
    :type reason: str
    :param ids: ids
    :type ids: List[TimesheetIdItems]
    """

    def __init__(
        self,
        status: InvoiceAdjustmentReviewsToCreateStatus,
        reason: str,
        ids: List[TimesheetIdItems],
    ):
        self.status = self._enum_matching(
            status, InvoiceAdjustmentReviewsToCreateStatus.list(), "status"
        )
        self.reason = reason
        self.ids = self._define_list(ids, TimesheetIdItems)
