/// <reference path="../../index.d.ts" />
import type { ISolutionItemHover, ISolutionItemSelected, ISolutionTypeHover, ITemplateInfo } from "../../utils/interfaces.js";
import type { PublicLitElement as LitElement } from "@arcgis/lumina";
import type { DependencyItem } from "../../utils/getRelatedInfos.js";
import type { T9nMeta } from "@arcgis/lumina/controllers";

export abstract class SolutionItemAccordion extends LitElement {
  /**
   * Contains the translations for this component.
   * All UI strings should be defined here.
   *
   * @internal
   */
  protected _translations: {
      usedInOtherSolutionsDeleteWarning: string;
      noPrivilegeToManage: string;
      openDetails: string;
      solutionsTemplates: string;
      usedInAnotherSolution: string;
      itemUsedInOtherSolutions: string;
  } & T9nMeta<{
      usedInOtherSolutionsDeleteWarning: string;
      noPrivilegeToManage: string;
      openDetails: string;
      solutionsTemplates: string;
      usedInAnotherSolution: string;
      itemUsedInOtherSolutions: string;
  }>;
  /** DependencyItem[]: List of items that have relationship dependencies outside of this solution */
  accessor itemRelationshipDependencies: DependencyItem[];
  /**
   * 'action' | 'item': Specifies the type of link that will be used for deployed items.
   *    'item' the items title will be underlined and clicking anywhere on the list item will open the items details page
   *    'action' a action will be added to the end of the list item that will open the items details page
   *
   * @default 'item'
   */
  accessor linkType: "action" | "item";
  /**
   * Specifies the selection mode of the item-type lists used in the component, where:
   *   'multiple' allows any number of selections,
   *   'single' allows only one selection,
   *   'single-persist' allows one selection and prevents de-selection, and
   *   'none' does not allow any selections (default)
   *
   * @default 'none'
   */
  accessor listSelectionMode: "multiple" | "single" | "single-persist" | "none";
  /**
   * string: The warning message to display when we have itemRelationshipDependencies
   *
   * @default ''
   */
  accessor reuseWarning: string;
  /** ITemplateInfo[]: Collection of template infos */
  accessor templateInfos: ITemplateInfo[];
  /** string[]: Collection of the solutions typeKeywords */
  accessor typeKeywords: string[];
  /** @default 'content' */
  accessor usageContext: "content" | "rename" | "delete";
  /** Collapses all items in the accordion. */
  collapseAll(): Promise<void>;
  /**
   * Deselects all items in the accordion.
   * Only applies when selectionMode is 'single' or 'single-persist'.
   *
   * @param collapseAccordion - Whether to also collapse the accordion items after deselecting
   */
  deselectAll(collapseAccordion?: boolean): Promise<void>;
  /** Expands the first accordion item */
  expandFirstItem(): Promise<void>;
  /**
   * Expands the accordion item containing for the provided id
   * Only applies when selectionMode is 'single' or 'single-persist'.
   *
   * @param id - the id of the item to select
   */
  expandItemById(id: string): Promise<void>;
  /**
   * Expands items in the accordion.
   * Only applies when selectionMode is 'multiple'.
   *
   * @param ids - the id of the item to select
   */
  expandItems(ids: string[]): Promise<void>;
  /** Selects the first item in the accordion and expands the accordion item containing it. */
  selectFirstItem(): Promise<void>;
  /**
   * Selects an item in the accordion and expands the accordion item containing it.
   * Only applies when selectionMode is 'single' or 'single-persist'.
   *
   * @param id - the id of the item to select
   */
  selectItem(id: string): Promise<void>;
  /**
   * Selects items in the accordion and expands the accordion item containing it.
   * Only applies when selectionMode is 'multiple'.
   *
   * @param ids - the id of the item to select
   */
  selectItems(ids: string[]): Promise<void>;
  readonly solutionItemHover: import("@arcgis/lumina").TargetedEvent<this, ISolutionItemHover>;
  readonly solutionItemSelect: import("@arcgis/lumina").TargetedEvent<this, ISolutionItemSelected>;
  readonly solutionTypeHover: import("@arcgis/lumina").TargetedEvent<this, ISolutionTypeHover>;
  readonly "@eventTypes": {
    solutionItemHover: SolutionItemAccordion["solutionItemHover"]["detail"];
    solutionItemSelect: SolutionItemAccordion["solutionItemSelect"]["detail"];
    solutionTypeHover: SolutionItemAccordion["solutionTypeHover"]["detail"];
  };
}