use common_utils::events::{ApiEventMetric, ApiEventsType};

#[cfg(feature = "dummy_connector")]
use crate::user::sample_data::SampleDataRequest;
#[cfg(feature = "control_center_theme")]
use crate::user::theme::{
    CreateThemeRequest, CreateUserThemeRequest, GetThemeResponse, ThemeVersionResponse,
    UpdateThemeRequest, UploadFileRequest,
};
use crate::user::{
    dashboard_metadata::{
        GetMetaDataRequest, GetMetaDataResponse, GetMultipleMetaDataPayload, SetMetaDataRequest,
    },
    AcceptInviteFromEmailRequest, AcceptInviteResponse, AuthSelectRequest, AuthorizeResponse,
    AuthorizeTokenRequest, BeginTotpResponse, ChangePasswordRequest, CloneConnectorRequest,
    ConnectAccountRequest, CreateInternalUserRequest, CreateTenantUserRequest,
    CreateUserAuthenticationMethodRequest, CreateUserAuthenticationMethodResponse,
    EmbeddedTokenInfoResponse, ForgotPasswordRequest, GetSsoAuthUrlRequest,
    GetUserAuthenticationMethodsRequest, GetUserDetailsResponse, GetUserInternalDetailsResponse,
    GetUserRoleDetailsRequest, GetUserRoleDetailsResponseV2, InviteUserRequest,
    IssueEmbeddedTokenResponse, ListUsersInternalRequest, ListUsersInternalResponse,
    PlatformAccountCreateRequest, PlatformAccountCreateResponse, ReInviteUserRequest,
    RecoveryCodes, ResetPasswordRequest, RotatePasswordRequest, SendVerifyEmailRequest,
    SignUpRequest, SignUpWithMerchantIdRequest, SsoSignInRequest, SwitchMerchantRequest,
    SwitchOrganizationRequest, SwitchProfileRequest, TokenResponse, TwoFactorAuthStatusResponse,
    TwoFactorStatus, UpdateUserAccountDetailsRequest, UpdateUserAuthenticationMethodRequest,
    UserFromEmailRequest, UserMerchantAccountResponse, UserMerchantCreate,
    UserMerchantDetailsResponse, UserOrgMerchantCreateRequest, VerifyEmailRequest,
    VerifyRecoveryCodeRequest, VerifyTotpRequest,
};

common_utils::impl_api_event_type!(
    Miscellaneous,
    (
        SignUpRequest,
        SignUpWithMerchantIdRequest,
        ChangePasswordRequest,
        GetMultipleMetaDataPayload,
        GetMetaDataResponse,
        GetMetaDataRequest,
        SetMetaDataRequest,
        SwitchOrganizationRequest,
        SwitchMerchantRequest,
        SwitchProfileRequest,
        CreateInternalUserRequest,
        CreateTenantUserRequest,
        PlatformAccountCreateRequest,
        PlatformAccountCreateResponse,
        UserOrgMerchantCreateRequest,
        UserMerchantAccountResponse,
        UserMerchantDetailsResponse,
        UserMerchantCreate,
        AuthorizeResponse,
        ConnectAccountRequest,
        ForgotPasswordRequest,
        ResetPasswordRequest,
        RotatePasswordRequest,
        InviteUserRequest,
        ReInviteUserRequest,
        VerifyEmailRequest,
        SendVerifyEmailRequest,
        AcceptInviteFromEmailRequest,
        UpdateUserAccountDetailsRequest,
        GetUserDetailsResponse,
        GetUserRoleDetailsRequest,
        GetUserRoleDetailsResponseV2,
        TokenResponse,
        AcceptInviteResponse,
        TwoFactorAuthStatusResponse,
        TwoFactorStatus,
        UserFromEmailRequest,
        BeginTotpResponse,
        VerifyRecoveryCodeRequest,
        VerifyTotpRequest,
        RecoveryCodes,
        GetUserAuthenticationMethodsRequest,
        CreateUserAuthenticationMethodRequest,
        CreateUserAuthenticationMethodResponse,
        UpdateUserAuthenticationMethodRequest,
        GetSsoAuthUrlRequest,
        SsoSignInRequest,
        AuthSelectRequest,
        CloneConnectorRequest,
        IssueEmbeddedTokenResponse,
        EmbeddedTokenInfoResponse,
        GetUserInternalDetailsResponse,
        ListUsersInternalRequest,
        ListUsersInternalResponse,
        AuthorizeTokenRequest
    )
);

#[cfg(feature = "control_center_theme")]
common_utils::impl_api_event_type!(
    Miscellaneous,
    (
        GetThemeResponse,
        UploadFileRequest,
        CreateThemeRequest,
        CreateUserThemeRequest,
        UpdateThemeRequest,
        ThemeVersionResponse
    )
);

#[cfg(feature = "dummy_connector")]
common_utils::impl_api_event_type!(Miscellaneous, (SampleDataRequest));
