export type PublisherState = Readonly<{
  status: 'idle' | 'loading' | 'ready' | 'empty' | 'error' | 'opened' | 'completed' | 'closed' | 'test_clicked' | 'impression_reported' | 'destroyed';
  test: boolean;
  code?: string;
  receipt?: string;
  session_id?: string;
  completed?: boolean;
}>;
export interface PublisherOptions {
  element: HTMLElement;
  endpoint?: string;
  language?: 'ru' | 'en';
  test?: boolean;
  timeoutMs?: number;
  csrfToken?: string;
  /** Public Mini App publisher UUID. Required, with valid Telegram.WebApp.initData, for paid impressions. */
  publisherId?: string;
  /** Enable only after consent to use a verified, existing PixorAds profile. Default false. */
  personalized?: boolean;
  /** Open rewarded card viewing inside the host Mini App instead of PixorAds. */
  embedded?: boolean;
  /** Automatic visit at initialization: init defaults true, create/mount false. Explicit trackVisit remains available. */
  trackAudience?: boolean;
  /** Fires before viewer dismissal. Not awaited or retried; verify receipt on YOUR backend before granting app rewards. */
  onReward?(result: {receipt: string; session_id: string}): void | Promise<void>;
  /** UI lifecycle only. No event proves a paid view or grants a reward. */
  onEvent?(state: PublisherState): void;
}
export interface PublisherController {
  mount(): Promise<PublisherState>;
  showNative(): Promise<PublisherState>;
  showInterstitial(): Promise<PublisherShowResult>;
  showRewarded(): Promise<PublisherShowResult>;
  trackVisit(): Promise<{recorded: boolean; source?: string}>;
  destroy(): void;
  getState(): PublisherState;
}
export type PublisherShowResult = {shown: boolean; completed: boolean; receipt?: string; session_id?: string; impression_confirmed?: boolean; test?: boolean};
declare global {
  interface Window {
    PixorAdsPublisher: {
      readonly version: string;
      create(options: PublisherOptions): PublisherController;
      init(options: Omit<PublisherOptions, 'element'> & {element?: HTMLElement}): PublisherController;
      mount(options: PublisherOptions): Promise<PublisherState>;
    };
  }
}
