/// <reference path="../../index.d.ts" />
import type { PublicLitElement as LitElement } from "@arcgis/lumina";
import type { IDeployFailed, IDeployProgressUpdate, ISolutionDesign, ISolutionInfoCard, IUserOption } from "../../utils/interfaces.js";
import type { T9nMeta } from "@arcgis/lumina/controllers";

export abstract class SolutionDeployDialog extends LitElement {
  /**
   * Contains the translations for this component.
   * All UI strings should be defined here.
   *
   * @internal
   */
  protected _translations: {
      cancel: string;
      close: string;
      modifyOption: string;
      deploy: string;
      failedToDeploy: string;
      options: string;
      selectSpatialReferenceNeeded: string;
      solutionName: string;
      solutionNameErrorBlank: string;
      solutionNameErrorLength: string;
      solutionNameErrorSpecialCharacter: string;
      solutionNameErrorUniqueName: string;
      solutionNameHint: string;
      spatialReference: string;
      spatialReferenceInstructions: string;
      spatialReferenceLearnMore: string;
      spatialReferenceNoDefined: string;
      title: string;
      tryAgain: string;
  } & T9nMeta<{
      cancel: string;
      close: string;
      modifyOption: string;
      deploy: string;
      failedToDeploy: string;
      options: string;
      selectSpatialReferenceNeeded: string;
      solutionName: string;
      solutionNameErrorBlank: string;
      solutionNameErrorLength: string;
      solutionNameErrorSpecialCharacter: string;
      solutionNameErrorUniqueName: string;
      solutionNameHint: string;
      spatialReference: string;
      spatialReferenceInstructions: string;
      spatialReferenceLearnMore: string;
      spatialReferenceNoDefined: string;
      title: string;
      tryAgain: string;
  }>;
  /** Key details about the solution */
  accessor card: ISolutionInfoCard | undefined;
  /**
   * Debug mode: when true, simulates a deployment failure instead of actually deploying
   *
   * @default false
   */
  accessor debugFailDeployment: boolean;
  /** Builder design payload to convert into buildSolution deploy params */
  accessor design: ISolutionDesign | null;
  /**
   * When true the dialog will be shown
   *
   * @default false
   */
  accessor open: boolean;
  /**
   * TODO...this will need to be thought through some more...
   * may be able to remove completely for v2 but need to look closer at other custom params that were supported to see
   */
  accessor userOptions: IUserOption[];
  /**
   * Closes the panel
   *
   * @param emitCancelEvent
   */
  close(emitCancelEvent?: boolean): void;
  /** Deploys a solution */
  deploy(): void;
  /** Emitted when the deploy dialog is cancelled or closed before deployment */
  readonly deployCancelled: import("@arcgis/lumina").TargetedEvent<this, void>;
  /**
   * Emitted on demand when deploy fails
   * The emitted IDeployFailed value provides access to the current card and job id
   */
  readonly deployFailed: import("@arcgis/lumina").TargetedEvent<this, IDeployFailed>;
  /**
   * Emitted on demand when deploy progress ends
   * The emitted boolean value indicates if the process was successful or not
   */
  readonly deployProgressEnd: import("@arcgis/lumina").TargetedEvent<this, string>;
  /** Emitted on demand when deploy progress is started */
  readonly deployProgressStart: import("@arcgis/lumina").TargetedEvent<this, AbortController>;
  /** Emitted on demand when deploy progress is updated */
  readonly deployProgressUpdated: import("@arcgis/lumina").TargetedEvent<this, IDeployProgressUpdate>;
  readonly "@eventTypes": {
    deployCancelled: SolutionDeployDialog["deployCancelled"]["detail"];
    deployFailed: SolutionDeployDialog["deployFailed"]["detail"];
    deployProgressEnd: SolutionDeployDialog["deployProgressEnd"]["detail"];
    deployProgressStart: SolutionDeployDialog["deployProgressStart"]["detail"];
    deployProgressUpdated: SolutionDeployDialog["deployProgressUpdated"]["detail"];
  };
}