import type { WebhookEvent, TextMessage, ImageMessage, VideoMessage, AudioMessage, StickerMessage, LocationMessage } from "@line/bot-sdk";
import type { BaseProbeResult } from "../channels/plugins/types.js";
export type LineTokenSource = "config" | "env" | "file" | "none";
interface LineAccountBaseConfig {
    enabled?: boolean;
    channelAccessToken?: string;
    channelSecret?: string;
    tokenFile?: string;
    secretFile?: string;
    name?: string;
    allowFrom?: Array<string | number>;
    groupAllowFrom?: Array<string | number>;
    dmPolicy?: "open" | "allowlist" | "pairing" | "disabled";
    groupPolicy?: "open" | "allowlist" | "disabled";
    /** Outbound response prefix override for this account. */
    responsePrefix?: string;
    mediaMaxMb?: number;
    webhookPath?: string;
    groups?: Record<string, LineGroupConfig>;
}
export interface LineConfig extends LineAccountBaseConfig {
    /** Per-account overrides keyed by account id. */
    accounts?: Record<string, LineAccountConfig>;
    /** Optional default account id when multiple accounts are configured. */
    defaultAccount?: string;
}
export interface LineAccountConfig extends LineAccountBaseConfig {
}
export interface LineGroupConfig {
    enabled?: boolean;
    allowFrom?: Array<string | number>;
    requireMention?: boolean;
    systemPrompt?: string;
    skills?: string[];
}
export interface ResolvedLineAccount {
    accountId: string;
    name?: string;
    enabled: boolean;
    channelAccessToken: string;
    channelSecret: string;
    tokenSource: LineTokenSource;
    config: LineConfig & LineAccountConfig;
}
export type LineMessageType = TextMessage | ImageMessage | VideoMessage | AudioMessage | StickerMessage | LocationMessage;
export interface LineWebhookContext {
    event: WebhookEvent;
    replyToken?: string;
    userId?: string;
    groupId?: string;
    roomId?: string;
}
export interface LineSendResult {
    messageId: string;
    chatId: string;
}
export type LineProbeResult = BaseProbeResult<string> & {
    bot?: {
        displayName?: string;
        userId?: string;
        basicId?: string;
        pictureUrl?: string;
    };
};
export type LineFlexMessagePayload = {
    altText: string;
    contents: unknown;
};
export type LineTemplateMessagePayload = {
    type: "confirm";
    text: string;
    confirmLabel: string;
    confirmData: string;
    cancelLabel: string;
    cancelData: string;
    altText?: string;
} | {
    type: "buttons";
    title: string;
    text: string;
    actions: Array<{
        type: "message" | "uri" | "postback";
        label: string;
        data?: string;
        uri?: string;
    }>;
    thumbnailImageUrl?: string;
    altText?: string;
} | {
    type: "carousel";
    columns: Array<{
        title?: string;
        text: string;
        thumbnailImageUrl?: string;
        actions: Array<{
            type: "message" | "uri" | "postback";
            label: string;
            data?: string;
            uri?: string;
        }>;
    }>;
    altText?: string;
};
export type LineChannelData = {
    quickReplies?: string[];
    location?: {
        title: string;
        address: string;
        latitude: number;
        longitude: number;
    };
    flexMessage?: LineFlexMessagePayload;
    templateMessage?: LineTemplateMessagePayload;
};
export {};
