import { LooseObject } from '../../../src/typings';

import { MockTarget } from './mock-target';
import { RequestHandler } from './request-handler';

export interface GetMonthlyUtilityDataRequestHandler extends RequestHandler {
  $eval<ReturnType>(
    selector: string,
    pageFunction: (
      element: Element,
      ...args: unknown[]
    ) => ReturnType | Promise<ReturnType>,
  ): Promise<Awaited<ReturnType>>;

  select(selector: string, ...values: string[]): Promise<string[]>;

  $$(selector: string): Promise<LooseObject>;

  $$eval<ReturnType>(
    selector: string,
    pageFunction: (
      elements: Element[],
      ...args: unknown[]
    ) => ReturnType | Promise<ReturnType>,
  ): Promise<Awaited<ReturnType>>;

  target(): MockTarget;
}
