import type {
  OfferRefreshRequest,
  OfferRefreshResponse,
  PurchasePlan,
  PurchasePlanResponse,
  SearchHistory,
  SearchHistoryResponse,
  StoreInfo,
  StoreSearchResponse,
} from "./contract.js";

export interface DesktopBridge {
  readonly platform: "desktop";
  readonly os: "win32" | "linux" | "darwin";
  stores(): Promise<{ stores: StoreInfo[] }>;
  search(storeId: string, query: string): Promise<StoreSearchResponse>;
  refreshOffer(request: OfferRefreshRequest): Promise<OfferRefreshResponse>;
  loadPlan(): Promise<PurchasePlanResponse>;
  savePlan(plan: PurchasePlan): Promise<{ updatedAt: number }>;
  loadSearchHistory(): Promise<SearchHistoryResponse>;
  saveSearchHistory(history: SearchHistory): Promise<{ updatedAt: number }>;
  showSolve(storeId: string): Promise<void>;
  dismissSolve(storeId: string): Promise<boolean>;
  onSolveCleared(listener: (storeId: string) => void): () => void;
  onSolveDismissed(listener: (storeId: string) => void): () => void;
}

declare global {
  interface Window {
    comparatorDesktop?: DesktopBridge;
  }
}
