import { APILinks } from '@vonage/server-client';
import { Application } from '../Application.mjs';
import { CapabilityVerifyResponse } from './CapabilityVerifyResponse.mjs';
import { CapabilityRTCResponse } from './CapabilityRTCResponse.mjs';
import { CapabilityVoiceResponse } from './CapabilityVoiceResponse.mjs';
import { CapabilityMeetingsResponse } from './CapabilityMeetingsResponse.mjs';
import { CapabilityBulkResponse } from './CapabilityBulkResponse.mjs';
import { CapabilityMessagesResponse } from './CapabilityMessagesResponse.mjs';
import '../CapabilityBulk.mjs';
import '../CapabilityWebhook.mjs';
import '../CapabilityMeetings.mjs';
import '../CapabilityMessages.mjs';
import '../CapabilityRTC.mjs';
import '../CapabilityVerify.mjs';
import '../CapabilityVoice.mjs';
import '../../enums/VoiceRegions.mjs';
import './CapabilityWebhookResponse.mjs';

/**
 * Represents a response containing application information.
 *
 * @remarks
 * Vonage API's will return information using `snake_case`. This represents the
 * pure response before the client will transform the keys into `camelCase`
 *
 * @link https://developer.vonage.com/en/api/application.v2#getApplication
 *
 * @see {@link Application}
 */
type ApplicationResponse = {
    /**
     * Keys associated with the application.
     */
    keys: {
        /**
         * The public key for the application.
         */
        public_key?: string | undefined;
        /**
         * The private key for the application.
         */
        private_key?: string | undefined;
    };
    /**
     * Privacy configuration for the application.
     */
    privacy: {
        /**
         * If set to true, Vonage may store and use your content and data for the
         * improvement of Vonage's AI-based services and technologies.
         */
        improve_ai?: boolean;
    };
    /**
     * Capabilities configuration for the application.
     */
    capabilities: {
        /**
         * RTC/Conversation Service related configuration.
         */
        rtc: CapabilityRTCResponse;
        /**
         * Voice related configuration.
         */
        voice: CapabilityVoiceResponse;
        /**
         * Meetings related configuration.
         */
        meetings: CapabilityMeetingsResponse;
        /**
         * Bulk related configuration.
         */
        bulk: CapabilityBulkResponse;
        /**
         * Messages/Dispatch related configuration.
         */
        messages: CapabilityMessagesResponse;
        /**
         * Verify related configuration.
         */
        verify: CapabilityVerifyResponse;
        /**
         * Specify the vbc capability to enable zero-rated calls for VBC number
         * programmability service applications. This is always an empty object.
         */
        vbc: unknown;
    };
} & Application & APILinks;

export type { ApplicationResponse };
