import { ErrorCode } from '@humanddev/material-hu/dropzone';

import FormDropHU from '@material-hu/components/deprecated/FormDrop';
import {
  type FormDropContext as FormDropHUContext,
  type FormDropProps as FormDropHUProps,
} from '@material-hu/components/deprecated/FormDrop/types';

import useHuGoTheme from 'src/hooks/useHuGoTheme';
import { bytesToSize } from 'src/utils/filesUtils';
import { useLokaliseTranslation } from 'src/utils/i18n';

export type FormDropProps = FormDropHUProps;

/**
 * @deprecated Use `@material-hu/components/design-system/Uploader` instead
 */
export const FormDrop = ({ ...dropProps }: FormDropProps) => {
  const HugoThemeProvider = useHuGoTheme();
  const { t } = useLokaliseTranslation('backoffice_only');

  const getErrorMessage = (
    errorCode: ErrorCode,
    context: FormDropHUContext,
  ) => {
    switch (errorCode) {
      case ErrorCode.FileTooLarge:
        return t('backoffice_only:form_drop.input_error_file_size', {
          context: context.type,
          max: bytesToSize(context.maxSize),
        });
      case ErrorCode.FileInvalidType:
        return t('backoffice_only:form_drop.input_error_file_type', {
          context: context.type,
        });
      case ErrorCode.TooManyFiles:
        return t('backoffice_only:form_drop.input_error_file_count', {
          context: context.type,
        });
      default:
        return t('backoffice_only:form_drop.input_error', {
          context: context.type,
        });
    }
  };

  return (
    <HugoThemeProvider>
      <FormDropHU
        altLabel={(context: FormDropHUContext) =>
          t('backoffice_only:form_drop.picture_alt', { context: context.type })
        }
        deleteLabel={(context: FormDropHUContext) =>
          t('backoffice_only:form_drop.delete', { context: context.type })
        }
        linkLabel={(context: FormDropHUContext) =>
          t('backoffice_only:form_drop.link_label', { context: context.type })
        }
        label={(context: FormDropHUContext) =>
          t('backoffice_only:form_drop.label', { context: context.type })
        }
        helpTextLabel={(context: FormDropHUContext) =>
          t('backoffice_only:form_drop.help_text', {
            context: context.type,
            max: bytesToSize(context.maxSize),
            width: context.recommendedWidth,
            height: context.recommendedHeight,
          })
        }
        sizeLabel={(context: FormDropHUContext) =>
          context.value?.file?.size
            ? bytesToSize(context.value?.file?.size)
            : ''
        }
        openLabel={() => t('backoffice_only:form_drop.open_label')}
        cancelLabel={t('general:cancel')}
        saveLabel={t('general:save')}
        cropLabel={t('backoffice_only:form_drop.edit_picture')}
        getErrorMessage={getErrorMessage}
        {...dropProps}
      />
    </HugoThemeProvider>
  );
};

export default FormDrop;
