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

export abstract class SolutionsSearchSortToolbar extends LitElement {
  /**
   * Contains the translations for this component.
   * All UI strings should be defined here.
   *
   * @internal
   */
  protected _translations: {
      chooseSortType: string;
      filterBy: string;
      mySolutions: string;
      myOrgSolutions: string;
      showFilters: string;
      sortByRelevance: string;
      sortByTitle: string;
      sortByNew: string;
      sortByDateDeployed: string;
      sortByUpdated: string;
      sortBySuggestedForYou: string;
      search: {
          solutions: string;
          deployments: string;
      };
  } & T9nMeta<{
      chooseSortType: string;
      filterBy: string;
      mySolutions: string;
      myOrgSolutions: string;
      showFilters: string;
      sortByRelevance: string;
      sortByTitle: string;
      sortByNew: string;
      sortByDateDeployed: string;
      sortByUpdated: string;
      sortBySuggestedForYou: string;
      search: {
          solutions: string;
          deployments: string;
      };
  }>;
  /**
   * The default type to sort solutions by
   *
   * @default 'relevance'
   */
  accessor defaultSortType: SortType;
  /**
   * Determines if the Owner section should be shown.
   *
   * @default false
   */
  accessor isOrgSolutions: boolean;
  /** The enviornment on which to perform search or sort */
  accessor scope: DeployAppTab | undefined;
  /**
   * Changes the filter to show only solutions that the user owns or the solutions within the organization.
   * This function is only available when the application is in the Deployments view.
   *
   * @param isMySolutions - Flag to show user's solution or organization's solutions.
   */
  changeOwnerFilter(isMySolutions: boolean): void;
  /**
   * Filters the solutions by a text search phrase.
   *
   * @param searchTerm - the string lookup solutions by.
   * @param emit - (Optional) Flag whether to emit. useful when you don't want to emit multiple times for example in clear filter.
   * @param startTelemetryTimer - (Optional) Flag whether to start the telemetry debounce timer.
   */
  changeSearchFilter(searchTerm: string, emit?: boolean, startTelemetryTimer?: boolean): void;
  /**
   * Change the user selected sort type
   *
   * @param sortType - the string to sort by. Valid values are 'relevance' | 'title' | 'new' | 'updated' | 'suggested' | 'created'.
   * @param emit - when true the sortTypeChanged event will be emitted and a new search will be fired
   *             when false only the current settings will be updated to support url params
   */
  sortChanged(sortType: SortType, emit: boolean): void;
  /** The event that gets emitted after any filter option has changed. */
  readonly searchChanged: import("@arcgis/lumina").TargetedEvent<this, {
      option: ISearchOption | IFilterOption | null;
      scope: DeployAppTab;
      logSearchTelemetry?: boolean;
  }>;
  /** Emitted on demand when the sort type changes */
  readonly sortTypeChanged: import("@arcgis/lumina").TargetedEvent<this, {
      sortType: SortType;
      scope: DeployAppTab;
  }>;
  /** Emitted on demand when the filter button is clicked in mobile */
  readonly toggleFilter: import("@arcgis/lumina").TargetedEvent<this, void>;
  /** Emitted on demand when navigating between tabs in the app */
  readonly updateUrlParams: import("@arcgis/lumina").TargetedEvent<this, IScopeSearchSortSettings | IFilterSetting | null>;
  readonly "@eventTypes": {
    searchChanged: SolutionsSearchSortToolbar["searchChanged"]["detail"];
    sortTypeChanged: SolutionsSearchSortToolbar["sortTypeChanged"]["detail"];
    toggleFilter: SolutionsSearchSortToolbar["toggleFilter"]["detail"];
    updateUrlParams: SolutionsSearchSortToolbar["updateUrlParams"]["detail"];
  };
}