import type { CoderClawConfig } from "../../config/config.js";
import type { DmPolicy } from "../../config/types.js";
import type { RuntimeEnv } from "../../runtime.js";
import type { WizardPrompter } from "../../wizard/prompts.js";
import type { ChannelId } from "./types.js";
export type SetupChannelsOptions = {
    allowDisable?: boolean;
    allowSignalInstall?: boolean;
    onSelection?: (selection: ChannelId[]) => void;
    accountIds?: Partial<Record<ChannelId, string>>;
    onAccountId?: (channel: ChannelId, accountId: string) => void;
    promptAccountIds?: boolean;
    whatsappAccountId?: string;
    promptWhatsAppAccountId?: boolean;
    onWhatsAppAccountId?: (accountId: string) => void;
    forceAllowFromChannels?: ChannelId[];
    skipStatusNote?: boolean;
    skipDmPolicyPrompt?: boolean;
    skipConfirm?: boolean;
    quickstartDefaults?: boolean;
    initialSelection?: ChannelId[];
};
export type PromptAccountIdParams = {
    cfg: CoderClawConfig;
    prompter: WizardPrompter;
    label: string;
    currentId?: string;
    listAccountIds: (cfg: CoderClawConfig) => string[];
    defaultAccountId: string;
};
export type PromptAccountId = (params: PromptAccountIdParams) => Promise<string>;
export type ChannelOnboardingStatus = {
    channel: ChannelId;
    configured: boolean;
    statusLines: string[];
    selectionHint?: string;
    quickstartScore?: number;
};
export type ChannelOnboardingStatusContext = {
    cfg: CoderClawConfig;
    options?: SetupChannelsOptions;
    accountOverrides: Partial<Record<ChannelId, string>>;
};
export type ChannelOnboardingConfigureContext = {
    cfg: CoderClawConfig;
    runtime: RuntimeEnv;
    prompter: WizardPrompter;
    options?: SetupChannelsOptions;
    accountOverrides: Partial<Record<ChannelId, string>>;
    shouldPromptAccountIds: boolean;
    forceAllowFrom: boolean;
};
export type ChannelOnboardingResult = {
    cfg: CoderClawConfig;
    accountId?: string;
};
export type ChannelOnboardingDmPolicy = {
    label: string;
    channel: ChannelId;
    policyKey: string;
    allowFromKey: string;
    getCurrent: (cfg: CoderClawConfig) => DmPolicy;
    setPolicy: (cfg: CoderClawConfig, policy: DmPolicy) => CoderClawConfig;
    promptAllowFrom?: (params: {
        cfg: CoderClawConfig;
        prompter: WizardPrompter;
        accountId?: string;
    }) => Promise<CoderClawConfig>;
};
export type ChannelOnboardingAdapter = {
    channel: ChannelId;
    getStatus: (ctx: ChannelOnboardingStatusContext) => Promise<ChannelOnboardingStatus>;
    configure: (ctx: ChannelOnboardingConfigureContext) => Promise<ChannelOnboardingResult>;
    dmPolicy?: ChannelOnboardingDmPolicy;
    onAccountRecorded?: (accountId: string, options?: SetupChannelsOptions) => void;
    disable?: (cfg: CoderClawConfig) => CoderClawConfig;
};
