import { ViewStyle } from 'react-native';

import { TranslationKey } from '~/i18n';

export interface SwitchProps {
  /**
   * On or off.
   */
  value?: boolean;
  /**
   * Fires when the on/off switch triggers.
   *
   * @param newValue The new value we're switching to.
   */
  onToggle?: (newValue: boolean) => void;

  /**
   * A style override to apply to the container.  Useful for margins and paddings.
   */
  style?: ViewStyle | ViewStyle[];

  /**
   * Additional track styling when on.
   */
  trackOnStyle?: ViewStyle | ViewStyle[];

  /**
   * Additional track styling when off.
   */
  trackOffStyle?: ViewStyle | ViewStyle[];

  /**
   * Additional thumb styling when on.
   */
  thumbOnStyle?: ViewStyle | ViewStyle[];

  /**
   * Additional thumb styling when off.
   */
  thumbOffStyle?: ViewStyle | ViewStyle[];
}

export interface LabeledSwitchProps extends SwitchProps {
  /**
   * Label which is looked up via i18n.
   */
  labelTx?: TranslationKey;

  /**
   * The label to display if not using `tx` or nested components.
   */
  label?: string;

  /**
   * Off label which is looked up via i18n.
   */
  offLabelTx?: TranslationKey;

  /**
   * The off label to display if not using `tx` or nested components.
   */
  offLabel?: string;

  /**
   * On label which is looked up via i18n.
   */
  onLabelTx?: TranslationKey;

  /**
   * The on label to display if not using `tx` or nested components.
   */
  onLabel?: string;

  /**
   * A style override to apply to the text
   */
  textStyle?: ViewStyle | ViewStyle[];
}
