import { PostHog } from 'posthog-node';
import { Adapter, ProviderData } from 'flags';

type JsonType = string | number | boolean | null | {
    [key: string]: JsonType;
} | Array<JsonType>;
interface PostHogEntities {
    distinctId: string;
}
type PostHogAdapter = {
    isFeatureEnabled: (options?: {
        sendFeatureFlagEvents?: boolean;
    }) => Adapter<boolean, PostHogEntities>;
    featureFlagValue: (options?: {
        sendFeatureFlagEvents?: boolean;
    }) => Adapter<string | boolean, PostHogEntities>;
    featureFlagPayload: <T>(getValue: (payload: JsonType) => T, options?: {
        sendFeatureFlagEvents?: boolean;
    }) => Adapter<T, PostHogEntities>;
};

declare function getProviderData(options: {
    personalApiKey: string;
    projectId: string;
    appHost?: string;
}): Promise<ProviderData>;

declare function createPostHogAdapter({ postHogKey, postHogOptions, }: {
    postHogKey: ConstructorParameters<typeof PostHog>[0];
    postHogOptions: ConstructorParameters<typeof PostHog>[1];
}): PostHogAdapter;
declare const postHogAdapter: PostHogAdapter;

export { type JsonType, type PostHogEntities, createPostHogAdapter, getProviderData, postHogAdapter };
