import React, { useContext } from "react";
import { getTranslations } from "../../shared/utils/localization-util";
import SettingsContext from "../settings-context";
import { buildClassName } from "../../shared/utils/class-util";
import Icon from "./icon";

interface AmountInputProps {
  label: string;
  value: number;
  disabled?: boolean;
  min?: number;
  onChange?: (value: number) => void;
}

const AmountInput: React.FC<AmountInputProps> = ({
  label,
  value,
  disabled,
  min,
  onChange
}) => {
  
  const {
    language,
  } = useContext(SettingsContext);
  const translations = getTranslations(language);

  const handleIncreaseClick: React.MouseEventHandler<HTMLButtonElement> = (event) => {
    if (onChange) {
      onChange(value + 1);
    }
  };

  const handleDecreaseClick: React.MouseEventHandler<HTMLButtonElement> = (event) => {
    if (onChange) {
      onChange(Math.max(value - 1, min ?? 0));
    }
  };

  return (
    <div className={buildClassName(["decrement-increment", disabled && "decrement-increment--disabled"])}>
      <label className="decrement-increment__label">{label}</label>
      <div className="decrement-increment__ui">
        {!disabled && (<button
          type="button"
          className="button button--decrement"
          title={translations.INPUT.DECREASE}
          disabled={disabled}
          onClick={handleDecreaseClick}
        ><Icon name="ui-min" /></button>)}
        <span>{value}</span>
        {!disabled && (<button
          type="button"
          className="button button--increment"
          title={translations.INPUT.INCREASE}
          disabled={disabled}
          onClick={handleIncreaseClick}
        ><Icon name="ui-plus" /></button>)}
      </div>
    </div>
  );
};

export default AmountInput;
