/// <reference path="../../index.d.ts" />
import type { PublicLitElement as LitElement } from "@arcgis/lumina";
import type { IFilterOption, IQueryParams, ISearchOption, ISearchTerm, ISortOption, ISortType, SortType } from "../../utils/interfaces.js";
import type { T9nMeta } from "@arcgis/lumina/controllers";

export abstract class SolutionsDeployedPanel extends LitElement {
  /**
   * Contains the translations for this component.
   * All UI strings should be defined here.
   *
   * @internal
   */
  protected _translations: {
      allDeployed: string;
      deleteComplete: string;
      fetchingDeployedSolutions: string;
      noSolutionsFound: string;
      noSolutionsInstruction: string;
      solution: string;
  } & T9nMeta<{
      allDeployed: string;
      deleteComplete: string;
      fetchingDeployedSolutions: string;
      noSolutionsFound: string;
      noSolutionsInstruction: string;
      solution: string;
  }>;
  /**
   * Define how the cards will be sorted
   * valid options for deplyed cards are: created (ie date deployed), relevance, title
   *
   * @default 'created'
   */
  accessor sortType: SortType;
  /**
   * function to refresh the panel after a deletion or solution title/snippet change
   *
   * @param showDeleteMessage
   * @param useTimeout
   * @param solutionTitle
   */
  reload(showDeleteMessage?: boolean, useTimeout?: boolean, solutionTitle?: string): Promise<void>;
  /**
   * Search solutions based on key criteria
   *
   * @param searchOptions - the key criteria to search with
   */
  searchSolutions(searchOptions?: IFilterOption | ISearchOption | ISortOption | IQueryParams): Promise<void>;
  /**
   * Set key properties for solution search
   * This is used for handeling multiple options from url params
   *
   * @param searchOptions - the key criteria that will be used when searched
   */
  setSearchOptions(searchOptions?: IFilterOption | ISearchOption | ISortOption): Promise<void>;
  /** Emitted on demand when cards are fetched */
  readonly deployedCardsFetched: import("@arcgis/lumina").TargetedEvent<this, number>;
  /** Emitted on demand when the serachTerm is set from url param */
  readonly searchTermSet: import("@arcgis/lumina").TargetedEvent<this, ISearchTerm>;
  /** Emitted on demand when the sortType is set from url param */
  readonly sortTypeSet: import("@arcgis/lumina").TargetedEvent<this, ISortType>;
  readonly "@eventTypes": {
    deployedCardsFetched: SolutionsDeployedPanel["deployedCardsFetched"]["detail"];
    searchTermSet: SolutionsDeployedPanel["searchTermSet"]["detail"];
    sortTypeSet: SolutionsDeployedPanel["sortTypeSet"]["detail"];
  };
}