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?: 'en' | 'ru' | 'es' | 'pt' | 'de' | 'fr' | 'it' | 'nl' | 'pl' | 'uk' | 'tr' | 'ar' | 'fa' | 'he' | 'hi' | 'bn' | 'ur' | 'id' | 'ms' | 'vi' | 'th' | 'zh' | 'ja' | 'ko' | 'fil' | 'ro' | 'cs' | 'sv' | 'fi' | 'da' | 'no' | 'el' | 'hu' | 'bg' | 'sr' | 'uz' | 'kk';
  test?: boolean;
  timeoutMs?: number;
  csrfToken?: string;
  /** Public Mini App publisher UUID. Required, with valid Telegram.WebApp.initData, for paid impressions. */
  publisherId?: string;
  /** Optional profile/Premium targeting; default false. Signed identity still protects impression billing/frequency. */
  personalized?: boolean;
  /** Open rewarded card viewing inside the host Mini App instead of Pixora Ads. */
  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>;
    };
  }
}
