/// <reference path="../../index.d.ts" />
import type View from "@arcgis/core/views/View.js";
import type { PublicLitElement as LitElement } from "@arcgis/lumina";
import type { FieldInfoLayer } from "./utils/basic.js";
import type { T9nMeta } from "@arcgis/lumina/controllers";

/** @internal */
export abstract class ArcgisFieldInfo extends LitElement {
  /** @internal */
  protected _messages: {
      fieldType: string;
      fieldAlias: string;
      fieldDescription: string;
      fieldValueType: string;
      fieldSampleValue: string;
      fieldDecimalPlaces: string;
      fieldMinimumFractionDigits: string;
      fieldMaximumFractionDigits: string;
      fieldStatistics: string;
      fieldDescriptionNotSet: string;
      fieldValueTypeNotSet: string;
      fieldSampleRetrieving: string;
      fieldSampleNotAvailable: string;
      fieldDecimalPlacesNotAvailable: string;
      fieldNumDecimalPlaces: string;
      fieldStatisticsRetrieving: string;
      fieldStatisticsNotAvailable: string;
      fieldUniqueValuesRetrieving: string;
      fieldUniqueValuesNotAvailable: string;
      fieldTypes: {
          integer: string;
          smallInteger: string;
          bigInteger: string;
          single: string;
          double: string;
          long: string;
          string: string;
          date: string;
          dateOnly: string;
          timeOnly: string;
          timestampOffset: string;
          oid: string;
          guid: string;
          globalId: string;
      };
      fieldValueTypes: {
          nameOrTitle: string;
          description: string;
          typeOrCategory: string;
          countOrAmount: string;
          percentageOrRatio: string;
          measurement: string;
          uniqueIdentifier: string;
          orderedOrRanked: string;
          binary: string;
          locationOrPlaceName: string;
          coordinate: string;
          currency: string;
          phoneNumber: string;
          emailAddress: string;
          dateAndTime: string;
      };
      statistics: {
          numberOfValues: string;
          numberOfNulls: string;
          allNulls: string;
          topValues: string;
          topTenValues: string;
          count: string;
          sumOfValues: string;
          minimum: string;
          maximum: string;
          average: string;
          standardDeviation: string;
          minimumDate: string;
          maximumDate: string;
          averageDate: string;
          minimumTime: string;
          maximumTime: string;
          averageTime: string;
          timespan: string;
          timeSpanOptions: {
              day: string;
              days: string;
              month: string;
              months: string;
              year: string;
              years: string;
          };
      };
  } & T9nMeta<{
      fieldType: string;
      fieldAlias: string;
      fieldDescription: string;
      fieldValueType: string;
      fieldSampleValue: string;
      fieldDecimalPlaces: string;
      fieldMinimumFractionDigits: string;
      fieldMaximumFractionDigits: string;
      fieldStatistics: string;
      fieldDescriptionNotSet: string;
      fieldValueTypeNotSet: string;
      fieldSampleRetrieving: string;
      fieldSampleNotAvailable: string;
      fieldDecimalPlacesNotAvailable: string;
      fieldNumDecimalPlaces: string;
      fieldStatisticsRetrieving: string;
      fieldStatisticsNotAvailable: string;
      fieldUniqueValuesRetrieving: string;
      fieldUniqueValuesNotAvailable: string;
      fieldTypes: {
          integer: string;
          smallInteger: string;
          bigInteger: string;
          single: string;
          double: string;
          long: string;
          string: string;
          date: string;
          dateOnly: string;
          timeOnly: string;
          timestampOffset: string;
          oid: string;
          guid: string;
          globalId: string;
      };
      fieldValueTypes: {
          nameOrTitle: string;
          description: string;
          typeOrCategory: string;
          countOrAmount: string;
          percentageOrRatio: string;
          measurement: string;
          uniqueIdentifier: string;
          orderedOrRanked: string;
          binary: string;
          locationOrPlaceName: string;
          coordinate: string;
          currency: string;
          phoneNumber: string;
          emailAddress: string;
          dateAndTime: string;
      };
      statistics: {
          numberOfValues: string;
          numberOfNulls: string;
          allNulls: string;
          topValues: string;
          topTenValues: string;
          count: string;
          sumOfValues: string;
          minimum: string;
          maximum: string;
          average: string;
          standardDeviation: string;
          minimumDate: string;
          maximumDate: string;
          averageDate: string;
          minimumTime: string;
          maximumTime: string;
          averageTime: string;
          timespan: string;
          timeSpanOptions: {
              day: string;
              days: string;
              month: string;
              months: string;
              year: string;
              years: string;
          };
      };
  }>;
  /** Required field name. */
  accessor fieldName: string | undefined;
  /**
   * If true, hide the field alias section.
   *
   * @default false
   */
  accessor hideAlias: boolean;
  /**
   * If true, hide the decimal places section.
   *
   * @default false
   */
  accessor hideNumericFormat: boolean;
  /**
   * If true, hide statistics (i.e., no top 10 values for string and no stats for number and date fields).
   *
   * @default false
   */
  accessor hideStatistics: boolean;
  /** Required layer instance. */
  accessor layer: FieldInfoLayer | undefined;
  /** View instance. If no view is provided all dates will show in 'system' timezone. */
  accessor view: View | undefined;
  /** Refresh the field info display after external changes are made. */
  refresh(): Promise<void>;
  /** Emitted once all information is displayed. */
  readonly arcgisComplete: import("@arcgis/lumina").TargetedEvent<this, void>;
  /** @deprecated use arcgisComplete instead. */
  readonly arcgisFieldInfoComplete: import("@arcgis/lumina").TargetedEvent<this, void>;
  readonly "@eventTypes": {
    arcgisComplete: ArcgisFieldInfo["arcgisComplete"]["detail"];
    arcgisFieldInfoComplete: ArcgisFieldInfo["arcgisFieldInfoComplete"]["detail"];
  };
}