import {
  OutlinedInput as MUIOutlinedInput,
  outlinedInputClasses as muiOutlinedInputClasses,
  OutlinedInputProps as MUIOutlinedInputProps,
} from '@mui/material';

import { GREY, TEXT, UNSELECTED } from '../../lib/consts/DEFAULT_THEME';

type OutlinedInputProps = MUIOutlinedInputProps;

const OutlinedInput = (outlinedInputProps: OutlinedInputProps): JSX.Element => {
  const { label, sx } = outlinedInputProps;
  const combinedSx = {
    color: GREY,

    [`& .${muiOutlinedInputClasses.notchedOutline}`]: {
      borderColor: UNSELECTED,
    },

    '&:hover': {
      [`& .${muiOutlinedInputClasses.notchedOutline}`]: {
        borderColor: GREY,
      },
    },

    [`&.${muiOutlinedInputClasses.focused}`]: {
      color: TEXT,

      [`& .${muiOutlinedInputClasses.notchedOutline}`]: {
        borderColor: GREY,

        '& legend': {
          paddingRight: label ? '1.2em' : 0,
        },
      },
    },

    ...sx,
  };

  return (
    <MUIOutlinedInput
      // eslint-disable-next-line react/jsx-props-no-spreading
      {...{
        ...outlinedInputProps,
        sx: combinedSx,
      }}
    />
  );
};

export type { OutlinedInputProps };

export default OutlinedInput;
