import { DefineComponent, Directive } from 'vue';

export interface I18nPlugin {
  locale: string;
  t: (key: string, value: string) => string;
}

export interface StashProvideState {
  components?: Record<string, DefineComponent>;
  directives?: Record<string, Directive>;
  i18n?: I18nPlugin;
  images: StashOptionImages;
  storage?: unknown;
  staticPath: string;
  googleMapsApiKey?: string;
}

export enum StashImageProvider {
  Static = 'static',
  Cloudinary = 'cloudinary',
}

/**
 * Image
 */
export type StashImageProviders = `${StashImageProvider}`;

export interface StashOptionImages {
  provider: StashImageProviders;
}

/**
 * For controlling properties like "padding" and "margin" within and between components.
 */
export enum SpacingDensity {
  Compact = 'compact',
  Comfortable = 'comfortable',
}

export type SpacingDensities = `${SpacingDensity}`;
