import { IAdaptiveCard } from '@microsoft/teams.cards';
import { AnimationCard } from '../card/animation-card.js';
import { AudioCard } from '../card/audio-card.js';
import { HeroCard } from '../card/hero-card.js';
import { ThumbnailCard } from '../card/thumbnail-card.js';
import { VideoCard } from '../card/video-card.js';
import { OAuthCard } from '../oauth/oauth-card.js';
import { SigninCard } from '../sign-in/sign-in-card.js';
import '../card/card-action.js';
import '../card/media-url.js';
import '../card/thumbnail-url.js';
import '../card/card-image.js';
import '../token/token-post-resource.js';
import '../token-exchange/token-exchange-resource.js';

declare function cardAttachment<T extends CardAttachmentType>(type: T, content: CardAttachmentTypes[T]['content']): CardAttachmentTypes[T];
type CardAttachmentType = keyof CardAttachmentTypes;
type CardAttachmentTypes = {
    adaptive: {
        contentType: 'application/vnd.microsoft.card.adaptive';
        content: IAdaptiveCard;
    };
    animation: {
        contentType: 'application/vnd.microsoft.card.animation';
        content: AnimationCard;
    };
    audio: {
        contentType: 'application/vnd.microsoft.card.audio';
        content: AudioCard;
    };
    hero: {
        contentType: 'application/vnd.microsoft.card.hero';
        content: HeroCard;
    };
    oauth: {
        contentType: 'application/vnd.microsoft.card.oauth';
        content: OAuthCard;
    };
    signin: {
        contentType: 'application/vnd.microsoft.card.signin';
        content: SigninCard;
    };
    thumbnail: {
        contentType: 'application/vnd.microsoft.card.thumbnail';
        content: ThumbnailCard;
    };
    video: {
        contentType: 'application/vnd.microsoft.card.video';
        content: VideoCard;
    };
};

export { type CardAttachmentType, type CardAttachmentTypes, cardAttachment };
