# coding: utf-8

"""
    Collibra Data Governance Center Core API

    <p>The Core REST API allows you to create your own integrations with Collibra Data Governance Center.</p><p><i>Create custom applications to help users get access to the right data.</i></p>  # noqa: E501

    The version of the OpenAPI document: 2.0
    Generated by: https://openapi-generator.tech
"""

from datetime import date, datetime  # noqa: F401
import decimal  # noqa: F401
import functools  # noqa: F401
import io  # noqa: F401
import re  # noqa: F401
import typing  # noqa: F401
import typing_extensions  # noqa: F401
import uuid  # noqa: F401

import frozendict  # noqa: F401

from collibra_core import schemas  # noqa: F401


class StartWorkflowInstancesRequest(
    schemas.DictSchema
):
    """NOTE: This class is auto generated by OpenAPI Generator.
    Ref: https://openapi-generator.tech

    Do not edit the class manually.

    The properties of the workflow to be started.
    """


    class MetaOapg:
        required = {
            "workflowDefinitionId",
        }
        
        class properties:
            workflowDefinitionId = schemas.UUIDSchema
            
            
            class businessItemIds(
                schemas.ListSchema
            ):
            
            
                class MetaOapg:
                    items = schemas.UUIDSchema
            
                def __new__(
                    cls,
                    arg: typing.Union[typing.Tuple[typing.Union[MetaOapg.items, str, uuid.UUID, ]], typing.List[typing.Union[MetaOapg.items, str, uuid.UUID, ]]],
                    _configuration: typing.Optional[schemas.Configuration] = None,
                ) -> 'businessItemIds':
                    return super().__new__(
                        cls,
                        arg,
                        _configuration=_configuration,
                    )
            
                def __getitem__(self, i: int) -> MetaOapg.items:
                    return super().__getitem__(i)
            
            
            class businessItemType(
                schemas.EnumBase,
                schemas.StrSchema
            ):
            
            
                class MetaOapg:
                    enum_value_to_name = {
                        "ASSET": "ASSET",
                        "DOMAIN": "DOMAIN",
                        "COMMUNITY": "COMMUNITY",
                        "GLOBAL": "GLOBAL",
                    }
                
                @schemas.classproperty
                def ASSET(cls):
                    return cls("ASSET")
                
                @schemas.classproperty
                def DOMAIN(cls):
                    return cls("DOMAIN")
                
                @schemas.classproperty
                def COMMUNITY(cls):
                    return cls("COMMUNITY")
                
                @schemas.classproperty
                def GLOBAL(cls):
                    return cls("GLOBAL")
            
            
            class formProperties(
                schemas.DictSchema
            ):
            
            
                class MetaOapg:
                    additional_properties = schemas.StrSchema
                
                def __getitem__(self, name: typing.Union[str, ]) -> MetaOapg.additional_properties:
                    # dict_instance[name] accessor
                    return super().__getitem__(name)
                
                def get_item_oapg(self, name: typing.Union[str, ]) -> MetaOapg.additional_properties:
                    return super().get_item_oapg(name)
            
                def __new__(
                    cls,
                    *args: typing.Union[dict, frozendict.frozendict, ],
                    _configuration: typing.Optional[schemas.Configuration] = None,
                    **kwargs: typing.Union[MetaOapg.additional_properties, str, ],
                ) -> 'formProperties':
                    return super().__new__(
                        cls,
                        *args,
                        _configuration=_configuration,
                        **kwargs,
                    )
            guestUserId = schemas.UUIDSchema
            sendNotification = schemas.BoolSchema
            __annotations__ = {
                "workflowDefinitionId": workflowDefinitionId,
                "businessItemIds": businessItemIds,
                "businessItemType": businessItemType,
                "formProperties": formProperties,
                "guestUserId": guestUserId,
                "sendNotification": sendNotification,
            }
    
    workflowDefinitionId: MetaOapg.properties.workflowDefinitionId
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["workflowDefinitionId"]) -> MetaOapg.properties.workflowDefinitionId: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["businessItemIds"]) -> MetaOapg.properties.businessItemIds: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["businessItemType"]) -> MetaOapg.properties.businessItemType: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["formProperties"]) -> MetaOapg.properties.formProperties: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["guestUserId"]) -> MetaOapg.properties.guestUserId: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["sendNotification"]) -> MetaOapg.properties.sendNotification: ...
    
    @typing.overload
    def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ...
    
    def __getitem__(self, name: typing.Union[typing_extensions.Literal["workflowDefinitionId", "businessItemIds", "businessItemType", "formProperties", "guestUserId", "sendNotification", ], str]):
        # dict_instance[name] accessor
        return super().__getitem__(name)
    
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["workflowDefinitionId"]) -> MetaOapg.properties.workflowDefinitionId: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["businessItemIds"]) -> typing.Union[MetaOapg.properties.businessItemIds, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["businessItemType"]) -> typing.Union[MetaOapg.properties.businessItemType, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["formProperties"]) -> typing.Union[MetaOapg.properties.formProperties, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["guestUserId"]) -> typing.Union[MetaOapg.properties.guestUserId, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["sendNotification"]) -> typing.Union[MetaOapg.properties.sendNotification, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: str) -> typing.Union[schemas.UnsetAnyTypeSchema, schemas.Unset]: ...
    
    def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["workflowDefinitionId", "businessItemIds", "businessItemType", "formProperties", "guestUserId", "sendNotification", ], str]):
        return super().get_item_oapg(name)
    

    def __new__(
        cls,
        *args: typing.Union[dict, frozendict.frozendict, ],
        workflowDefinitionId: typing.Union[MetaOapg.properties.workflowDefinitionId, str, uuid.UUID, ],
        businessItemIds: typing.Union[MetaOapg.properties.businessItemIds, list, tuple, schemas.Unset] = schemas.unset,
        businessItemType: typing.Union[MetaOapg.properties.businessItemType, str, schemas.Unset] = schemas.unset,
        formProperties: typing.Union[MetaOapg.properties.formProperties, dict, frozendict.frozendict, schemas.Unset] = schemas.unset,
        guestUserId: typing.Union[MetaOapg.properties.guestUserId, str, uuid.UUID, schemas.Unset] = schemas.unset,
        sendNotification: typing.Union[MetaOapg.properties.sendNotification, bool, schemas.Unset] = schemas.unset,
        _configuration: typing.Optional[schemas.Configuration] = None,
        **kwargs: typing.Union[schemas.AnyTypeSchema, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, None, list, tuple, bytes],
    ) -> 'StartWorkflowInstancesRequest':
        return super().__new__(
            cls,
            *args,
            workflowDefinitionId=workflowDefinitionId,
            businessItemIds=businessItemIds,
            businessItemType=businessItemType,
            formProperties=formProperties,
            guestUserId=guestUserId,
            sendNotification=sendNotification,
            _configuration=_configuration,
            **kwargs,
        )
