import {
  InputLabel as MUIInputLabel,
  inputLabelClasses as muiInputLabelClasses,
  InputLabelProps as MUIInputLabelProps,
} from '@mui/material';

import { BLACK, BORDER_RADIUS, GREY } from '../../lib/consts/DEFAULT_THEME';

type OutlinedInputLabelProps = MUIInputLabelProps;

const OutlinedInputLabel = (
  inputLabelProps: OutlinedInputLabelProps,
): JSX.Element => {
  const { children, sx } = inputLabelProps;
  const combinedSx = {
    color: GREY,

    [`&.${muiInputLabelClasses.focused}`]: {
      backgroundColor: GREY,
      borderRadius: BORDER_RADIUS,
      color: BLACK,
      padding: '.1em .6em',
    },

    ...sx,
  };

  return (
    <MUIInputLabel
      // eslint-disable-next-line react/jsx-props-no-spreading
      {...{
        // 1. Specify default props.
        variant: 'outlined',
        // 2. Override defaults with given props.
        ...inputLabelProps,
        // 3. Combine the default and given for props that can be both extended or override.
        sx: combinedSx,
      }}
    >
      {children}
    </MUIInputLabel>
  );
};

export type { OutlinedInputLabelProps };

export default OutlinedInputLabel;
