import React from 'react';
import { toEnglishDigits } from '../../lib/utils';

type Props = React.InputHTMLAttributes<HTMLInputElement> & {
  hasError?: boolean;
  /** فیلد فقط‌عددی: کیبورد عددی، جهت LTR، و تبدیل زندهٔ ارقام فارسی/عربی به لاتین. */
  numeric?: boolean;
};

/**
 * Input متنی پایهٔ design system: کلاس `cp-input`، حالت خطا (قاب قرمز)،
 * و forwardRef برای سازگاری با react-hook-form `register`.
 * با `numeric`، ورودی به لاتین نرمال می‌شود تا از ثبت ارقام فارسی جلوگیری شود.
 */
export default React.forwardRef<HTMLInputElement, Props>(function Input(
  { hasError, numeric, className, style, onChange, inputMode, dir, lang, ...rest },
  ref,
) {
  const handleChange = numeric
    ? (e: React.ChangeEvent<HTMLInputElement>) => {
        const latin = toEnglishDigits(e.target.value);
        if (latin !== e.target.value) e.target.value = latin;
        onChange?.(e);
      }
    : onChange;

  return (
    <input
      {...rest}
      ref={ref}
      onChange={handleChange}
      inputMode={numeric ? 'numeric' : inputMode}
      dir={numeric ? 'ltr' : dir}
      lang={numeric ? 'en' : lang}
      className={className ?? 'cp-input'}
      style={hasError ? { borderColor: 'var(--danger)', ...(style || {}) } : style}
    />
  );
});
