import { Box, Divider, List, ListItem } from '@mui/material';
import * as prettyBytes from 'pretty-bytes';

import { DIVIDER } from '../../lib/consts/DEFAULT_THEME';
import { UPLOAD_FILE_TYPES } from '../../lib/consts/UPLOAD_FILE_TYPES';

import { BodyText } from '../Text';

type FileListProps = {
  filesOverview: FileOverviewMetadata[];
};

const FileList = ({ filesOverview }: FileListProps): JSX.Element => (
  <List>
    {filesOverview.map(
      ({ fileChecksum, fileName, fileSizeInBytes, fileType, fileUUID }) => {
        const fileSize: string = prettyBytes.default(fileSizeInBytes, {
          binary: true,
        });

        return (
          <ListItem key={fileUUID} sx={{ padding: '.6em 0' }}>
            <Box
              sx={{
                display: 'flex',
                flexDirection: { xs: 'column', md: 'row' },
                width: '100%',
              }}
            >
              <Box sx={{ flexGrow: 1 }}>
                <Box
                  sx={{
                    display: 'flex',
                    flexDirection: 'row',
                  }}
                >
                  <BodyText
                    sx={{
                      fontFamily: 'Source Code Pro',
                      fontWeight: 400,
                    }}
                    text={fileName}
                  />
                  <Divider
                    flexItem
                    orientation="vertical"
                    sx={{
                      backgroundColor: DIVIDER,
                      marginLeft: '.5em',
                      marginRight: '.5em',
                    }}
                  />
                  <BodyText text={UPLOAD_FILE_TYPES.get(fileType)?.[1] ?? ''} />
                </Box>
                <BodyText text={fileSize} />
              </Box>
              <Box
                sx={{
                  alignItems: 'center',
                  display: 'flex',
                  flexDirection: 'row',
                }}
              >
                <BodyText
                  sx={{
                    fontFamily: 'Source Code Pro',
                    fontWeight: 400,
                  }}
                  text={fileChecksum}
                />
              </Box>
            </Box>
          </ListItem>
        );
      },
    )}
  </List>
);

export default FileList;
