import { useState, useCallback } from 'react';
import { Divider, InputBase } from '@mui/material';
import {
  RecordVideoMessageButton,
  RecordVoiceMessageButton,
  SelectEmojiButton,
  SendMessageButton,
  UploadFileButton,
} from './buttons';
import { Stack } from '@mui/system';

export default function SendMessageForm(props) {
  const [currentMessage, setCurrentMessage] = useState('');

  const handleSubmit = (e) => {
    e.preventDefault();
    if (currentMessage) {
      props.onSend(currentMessage);
      setCurrentMessage('');
    }
  };
  const handleInputChange = (event) => setCurrentMessage(event.target.value);

  const onEmojiSelected = useCallback(
    (emoji) => setCurrentMessage((currentMessage) => currentMessage + emoji),
    [setCurrentMessage]
  );

  return (
    <Stack padding="30px 16px 0px 16px">
      <Divider
        sx={{
          bordeTop: '1px solid #E5E5E5',
        }}
      />
      <Stack
        component="form"
        onSubmit={handleSubmit}
        direction="row"
        alignItems="center"
        flexGrow={1}
        spacing="20px"
        padding="16px 0px"
      >
        <UploadFileButton />
        <RecordVoiceMessageButton />
        <RecordVideoMessageButton />

        <Stack flexGrow={1}>
          <InputBase
            placeholder="Write something nice"
            value={currentMessage}
            onChange={handleInputChange}
            sx={{
              fontSize: '15px',
              color: 'black',
              '& ::placeholder': {
                color: '#7E7E7E',
                opacity: 1,
              },
            }}
          />
        </Stack>
        <SelectEmojiButton onEmojiSelected={onEmojiSelected} />
        {currentMessage && <SendMessageButton type="submit" />}
      </Stack>
    </Stack>
  );
}
