# coding: utf-8

from __future__ import absolute_import, division, print_function, unicode_literals

from utils.feishu.__version__ import __version__  # NOQA
from utils.feishu.api import OpenLark
from utils.feishu.api_app_link import APIAppLink
from utils.feishu.api_approval import ApprovalUploadFileType
from utils.feishu.api_calendar import CalendarRole
from utils.feishu.dt_application import App
from utils.feishu.dt_approval import (ApprovalComment, ApprovalDefinition, ApprovalForm, ApprovalInstance, ApprovalNode,
                                      ApprovalTask)
from utils.feishu.dt_calendar import Calendar, CalendarAttendee, CalendarEvent
from utils.feishu.dt_callback import (EventAppOpen, EventAppOpenUser, EventApproval, EventAppTicket, EventContactDepartment,
                                      EventContactScope, EventContactUser, EventLeaveApproval, EventMessage,
                                      EventMessageMergeForward, EventP2PCreateChat, EventP2PCreateChatUser,
                                      EventRemedyApproval, EventRemoveAddBot, EventRemoveAddBotI18NTitle, EventShiftApproval,
                                      EventTripApproval, EventTripApprovalSchedule, EventUserInAndOutChat, EventWorkApproval)
from utils.feishu.dt_code import Bot, Chat, I18NTitle, MinaCodeToSessionResp, OAuthCodeToSessionResp, SimpleUser, User
from utils.feishu.dt_contact import (ContactAsyncChildTaskInfo, ContactAsyncTaskResult, DepartmentUser, DepartmentUserAvatar,
                                     DepartmentUserCustomAttr, DepartmentUserCustomAttrValue, DepartmentUserOrder,
                                     DepartmentUserPosition, DepartmentUserStatus, EmployeeType, Gender, Role,
                                     SimpleDepartment, SimpleUserWithPosition)
from utils.feishu.dt_drive import (DriveComment, DriveCopyFile, DriveCreateFile, DriveDeleteFile, DriveDeleteFlag,
                                   DriveDocFileMeta, DriveFileMeta, DriveFilePermission, DriveFilePublicLinkSharePermission,
                                   DriveFileToken, DriveFileType, DriveFileUser, DriveFileUserPermission, DriveFolderMeta,
                                   DriveInsertSheet, DriveSheetCellAt, DriveSheetCellURL, DriveSheetMergeType, DriveSheetMeta,
                                   DriveSheetStyle, DriveSheetStyleBorderType, DriveSheetStyleFont,
                                   DriveSheetStyleHorizontalAlign, DriveSheetStyleNumber, DriveSheetStyleTextDecoration,
                                   DriveSheetStyleVerticalAlign, DriveSubSheetMeta, ReadDriveSheetRequest,
                                   WriteDriveSheetRequest)
from utils.feishu.dt_enum import (ApprovalInstanceStatus, ApprovalTaskStatus, ApprovalTaskTypeStatus, ApprovalTimelineType,
                                  CalendarEventVisibility, EventType, I18NType, ImageColor, MeetingReplyStatus, MessageType,
                                  MethodType, PayBuyType, PayPricePlanType, PayStatus, UrgentType)
from utils.feishu.dt_meeting_room import Building, Room, RoomFreeBusy
from utils.feishu.dt_message import (CardAction, CardButton, CardHeader, CardURL, I18nText, MessageAt, MessageImage,
                                     MessageLink, MessageText)
from utils.feishu.dt_pay import PayOrder
from utils.feishu.dt_req import CreateDepartmentRequest, CreateUserRequest, UpdateUserRequest
from utils.feishu.exception import (LarkAllOpenIDInvalidException, LarkAppHasNoBotException,
                                    LarkAppIsNotVisibleToUserException, LarkAppNotExistException,
                                    LarkApprovalApprovalCodeNotFoundException, LarkApprovalDepartmentValidFailedException,
                                    LarkApprovalForbiddenException, LarkApprovalFormValidFailedException,
                                    LarkApprovalInstanceCodeConflictException, LarkApprovalInstanceCodeNotFoundException,
                                    LarkApprovalInvalidRequestParamsException, LarkApprovalNeedPayException,
                                    LarkApprovalNotExistException, LarkApprovalSubscriptionExistException,
                                    LarkApprovalTaskIDNotFoundException, LarkApprovalUserNotFoundException,
                                    LarkAppUnavailableException, LarkAppUsageInfoNotExistException, LarkBanAtALLException,
                                    LarkBotForbiddenToGetImageBelongToThemException, LarkBotInChatFullException,
                                    LarkBotIsNotMessageOwnerException, LarkBotNotGroupAdminException,
                                    LarkBotNotInChatException, LarkChatDisbandedException, LarkCheckOpenChatIDFailException,
                                    LarkConflictAppIDException, LarkDriveDuplicateException, LarkDriveEmptySheetIDException,
                                    LarkDriveEmptySheetTitleException, LarkDriveEmptyValueException,
                                    LarkDriveExistSheetIDException, LarkDriveExistSheetTitleException,
                                    LarkDriveFailedException, LarkDriveFailException, LarkDriveForbiddenException,
                                    LarkDriveInternalErrorException, LarkDriveInvalidOperationException,
                                    LarkDriveInvalidUsersException, LarkDriveLoginRequiredException,
                                    LarkDriveMetaDeletedException, LarkDriveMetaNotExistException,
                                    LarkDriveOutOfLimitException, LarkDriveParamErrorException,
                                    LarkDrivePermissionFailException, LarkDriveProcessingException,
                                    LarkDriveReviewNotPassException, LarkDriveSameSheetIDOrTitleException,
                                    LarkDriveSheetIDNotFoundException, LarkDriveSpreadSheetNotFoundException,
                                    LarkDriveTimeoutException, LarkDriveTooManyRequestException,
                                    LarkDriveUserNoSharePermissionException, LarkDriveWrongRangeException,
                                    LarkDriveWrongRequestBodyException, LarkDriveWrongRequestJsonException,
                                    LarkDriveWrongRowOrColException, LarkDriveWrongSheetIDException,
                                    LarkEmployeeIDNotExistException, LarkEmptyChatIDException,
                                    LarkForbiddenBotBatchSendMessageToDepartmentException,
                                    LarkForbiddenBotBatchSendMessageToUserException, LarkForbiddenBotDisbandChatException,
                                    LarkForbiddenSendMessageException, LarkForbiddenUrgentException,
                                    LarkFrequencyLimitException, LarkGetAppAccessTokenFailException,
                                    LarkGetChatIDFailException, LarkGetCheckSecurityTokenFailException,
                                    LarkGetEmployeeIDFailException, LarkGetMessageIDFailException,
                                    LarkGetOpenChatIDFailException, LarkGetOpenDepartmentIDFailException,
                                    LarkGetOpenIDFailException, LarkGetSSOAccessTokenFailException,
                                    LarkGetTenantAccessTokenFailException, LarkGetUserInfoFailOrUserIDNotExistException,
                                    LarkImageKeyNotExistException, LarkInternalException, LarkInvalidAppAccessTokenException,
                                    LarkInvalidAppIDException, LarkInvalidAppTicketException, LarkInvalidArguments,
                                    LarkInvalidMessageIDException, LarkInvalidOpenChatIDException,
                                    LarkInvalidTenantAccessTokenException, LarkInvalidTenantCodeException,
                                    LarkInviteBotToChatFailException, LarkInviteUserToChatInvalidParamsException,
                                    LarkMeetingRoomInvalidBuildingIDException, LarkMeetingRoomInvalidFieldSelectionException,
                                    LarkMeetingRoomInvalidPageTokenException, LarkMeetingRoomInvalidRoomIDException,
                                    LarkMeetingRoomTimeFormatMustFollowRFC3339StandardException, LarkMessageTooOldException,
                                    LarkNoPermissionToGotException, LarkNotOpenApplicationSendMessagePermissionException,
                                    LarkOnlyChatAdminCanInviteUserException, LarkOpenDepartmentIDNotExistException,
                                    LarkOpenIDNotExistException, LarkOwnerOfBotIsNotInChatException,
                                    LarkRemoveUserFromChatInvalidParamsException, LarkRequestParamsInvalidException,
                                    LarkSendAppTicketFailException, LarkSendMessageFailException,
                                    LarkUnsupportedChatCrossTenantException, LarkUnsupportedCrossTenantException,
                                    LarkUnsupportedUrgentTypeException, LarkUpdateChatInvalidParamsException,
                                    LarkUpdateChatNameFailException, LarkUploadImageInvalidParamsException,
                                    LarkUserCannotGrantToChatAdminException, LarkUserNotActiveException,
                                    LarkWrongAppSecretException, LarkWrongMessageIDException, OpenLarkException)

__author__ = 'chenyunpeng.1024 <chenyunpeng.1024@bytedance.com>'

__all__ = {
    'OpenLark',

    # datatype
    'SimpleUser',
    'User',
    'Bot',
    'Chat',
    'MinaCodeToSessionResp',
    'OAuthCodeToSessionResp',
    'I18NTitle',

    'APIAppLink',

    # callback datatype
    'EventMessageMergeForward',
    'EventMessage',
    'EventApproval',
    'EventLeaveApproval',
    'EventWorkApproval',
    'EventShiftApproval',
    'EventRemedyApproval',
    'EventTripApprovalSchedule',
    'EventTripApproval',
    'EventAppOpenUser',
    'EventAppOpen',
    'EventContactUser',
    'EventContactDepartment',
    'EventContactScope',
    'EventRemoveAddBot',
    'EventRemoveAddBotI18NTitle',
    'EventAppTicket',
    'EventP2PCreateChat',
    'EventP2PCreateChatUser',
    'EventUserInAndOutChat',

    # message datatype,
    'MessageText',
    'MessageAt',
    'MessageImage',
    'MessageLink',
    'I18nText',
    'CardURL',
    'CardHeader',
    'CardButton',
    'CardAction',

    # 审批
    'ApprovalNode',
    'ApprovalForm',
    'ApprovalDefinition',
    'ApprovalComment',
    'ApprovalInstanceStatus',
    'ApprovalTaskStatus',
    'ApprovalTaskTypeStatus',
    'ApprovalTask',
    'ApprovalInstance',
    'ApprovalTimelineType',

    # calendar datatype
    'Calendar',
    'CalendarAttendee',
    'CalendarEvent',

    # drive folder
    'DriveFileType',
    'DriveFolderMeta',
    'DriveCreateFile',
    'DriveDeleteFile',
    'DriveCopyFile',
    'DriveDeleteFlag',
    'DriveDocFileMeta',
    'DriveComment',
    'DriveFileToken',
    'DriveFileMeta',
    'DriveSubSheetMeta',
    'DriveSheetMeta',
    'DriveInsertSheet',
    'DriveSheetCellURL',
    'DriveSheetCellAt',
    'DriveSheetStyleTextDecoration',
    'DriveSheetStyleNumber',
    'DriveSheetStyleHorizontalAlign',
    'DriveSheetStyleVerticalAlign',
    'DriveSheetStyleBorderType',
    'DriveSheetStyleFont',
    'DriveSheetStyle',
    'DriveSheetMergeType',
    'ReadDriveSheetRequest',
    'WriteDriveSheetRequest',
    'DriveFilePermission',
    'DriveFileUserPermission',
    'DriveFileUser',
    'DriveFilePublicLinkSharePermission',

    # 会议室
    'Building',
    'Room',
    'RoomFreeBusy',

    # 订单
    'PayPricePlanType',
    'PayBuyType',
    'PayStatus',
    'PayOrder',

    # 应用
    'App',

    # 通讯录
    'SimpleDepartment',
    'DepartmentUserStatus',
    'DepartmentUserAvatar',
    'EmployeeType',
    'Gender',
    'SimpleUserWithPosition',
    'DepartmentUserPosition',
    'DepartmentUserOrder',
    'DepartmentUserCustomAttrValue',
    'DepartmentUserCustomAttr',
    'DepartmentUser',
    'ContactAsyncChildTaskInfo',
    'ContactAsyncTaskResult',
    'Role',
    'CreateDepartmentRequest',
    'CreateUserRequest',
    'UpdateUserRequest',

    # enum
    'MessageType',
    'UrgentType',
    'I18NType',
    'ImageColor',
    'MethodType',
    'CalendarRole',
    'CalendarEventVisibility',
    'ApprovalUploadFileType',
    'EventType',
    'MeetingReplyStatus',

    # exception
    'OpenLarkException',
    'LarkInvalidArguments',

    # 数字特别大
    'LarkFrequencyLimitException',

    # 审批
    'LarkApprovalNotExistException',
    'LarkApprovalSubscriptionExistException',
    'LarkApprovalInvalidRequestParamsException',
    'LarkApprovalApprovalCodeNotFoundException',
    'LarkApprovalInstanceCodeNotFoundException',
    'LarkApprovalUserNotFoundException',
    'LarkApprovalForbiddenException',
    'LarkApprovalTaskIDNotFoundException',
    'LarkApprovalDepartmentValidFailedException',
    'LarkApprovalFormValidFailedException',
    'LarkApprovalNeedPayException',
    'LarkApprovalInstanceCodeConflictException',
    'LarkBotIsNotMessageOwnerException',
    'LarkBanAtALLException',
    'LarkUserNotActiveException',
    'LarkChatDisbandedException',
    'LarkMessageTooOldException',
    'LarkNoPermissionToGotException',
    'LarkInvalidTenantAccessTokenException',
    'LarkInvalidAppAccessTokenException',
    'LarkInvalidTenantCodeException',
    'LarkInvalidAppTicketException',

    # 机器人
    'LarkSendMessageFailException',
    'LarkRequestParamsInvalidException',
    'LarkGetUserInfoFailOrUserIDNotExistException',
    'LarkConflictAppIDException',
    'LarkGetOpenChatIDFailException',
    'LarkForbiddenSendMessageException',
    'LarkGetAppAccessTokenFailException',
    'LarkInvalidOpenChatIDException',
    'LarkGetTenantAccessTokenFailException',
    'LarkGetTenantAccessTokenFailException',
    'LarkWrongAppSecretException',
    'LarkSendAppTicketFailException',
    'LarkUnsupportedUrgentTypeException',
    'LarkWrongMessageIDException',
    'LarkForbiddenUrgentException',
    'LarkCheckOpenChatIDFailException',
    'LarkBotNotInChatException',
    'LarkAllOpenIDInvalidException',
    'LarkUnsupportedCrossTenantException',
    'LarkGetMessageIDFailException',
    'LarkGetSSOAccessTokenFailException',
    'LarkGetCheckSecurityTokenFailException',
    'LarkCheckOpenChatIDFailException',
    'LarkOpenIDNotExistException',
    'LarkGetOpenIDFailException',
    'LarkOpenDepartmentIDNotExistException',
    'LarkGetOpenDepartmentIDFailException',
    'LarkEmployeeIDNotExistException',
    'LarkGetEmployeeIDFailException',
    'LarkUpdateChatNameFailException',
    'LarkBotNotGroupAdminException',
    'LarkBotNotGroupAdminException',
    'LarkOnlyChatAdminCanInviteUserException',
    'LarkForbiddenBotBatchSendMessageToUserException',
    'LarkForbiddenBotBatchSendMessageToDepartmentException',
    'LarkAppHasNoBotException',
    'LarkUserCannotGrantToChatAdminException',
    'LarkAppUnavailableException',
    'LarkAppNotExistException',
    'LarkAppUsageInfoNotExistException',
    'LarkInviteUserToChatInvalidParamsException',
    'LarkRemoveUserFromChatInvalidParamsException',
    'LarkUpdateChatInvalidParamsException',
    'LarkUploadImageInvalidParamsException',
    'LarkEmptyChatIDException',
    'LarkGetChatIDFailException',
    'LarkInviteBotToChatFailException',
    'LarkBotInChatFullException',
    'LarkUnsupportedChatCrossTenantException',
    'LarkForbiddenBotDisbandChatException',
    'LarkBotForbiddenToGetImageBelongToThemException',
    'LarkOwnerOfBotIsNotInChatException',
    'LarkNotOpenApplicationSendMessagePermissionException',
    'LarkInvalidMessageIDException',
    'LarkAppIsNotVisibleToUserException',
    'LarkInvalidAppIDException',
    'LarkImageKeyNotExistException',
    'LarkInternalException',

    # 云空间
    'LarkDriveWrongRequestJsonException',
    'LarkDriveWrongRangeException',
    'LarkDriveFailException',
    'LarkDriveWrongRequestBodyException',
    'LarkDriveInvalidUsersException',
    'LarkDriveEmptySheetIDException',
    'LarkDriveEmptySheetTitleException',
    'LarkDriveSameSheetIDOrTitleException',
    'LarkDriveExistSheetIDException',
    'LarkDriveExistSheetTitleException',
    'LarkDriveWrongSheetIDException',
    'LarkDriveWrongRowOrColException',
    'LarkDrivePermissionFailException',
    'LarkDriveSpreadSheetNotFoundException',
    'LarkDriveSheetIDNotFoundException',
    'LarkDriveEmptyValueException',
    'LarkDriveTooManyRequestException',
    'LarkDriveTimeoutException',
    'LarkDriveProcessingException',
    'LarkDriveLoginRequiredException',
    'LarkDriveFailedException',
    'LarkDriveOutOfLimitException',
    'LarkDriveDuplicateException',
    'LarkDriveForbiddenException',
    'LarkDriveInvalidOperationException',
    'LarkDriveUserNoSharePermissionException',
    'LarkDriveParamErrorException',
    'LarkDriveMetaDeletedException',
    'LarkDriveMetaNotExistException',
    'LarkDriveReviewNotPassException',
    'LarkDriveInternalErrorException',

    # 会议室
    'LarkMeetingRoomInvalidPageTokenException',
    'LarkMeetingRoomInvalidFieldSelectionException',
    'LarkMeetingRoomTimeFormatMustFollowRFC3339StandardException',
    'LarkMeetingRoomInvalidBuildingIDException',
    'LarkMeetingRoomInvalidRoomIDException',
}
