import { useCallback, ReactNode } from 'react';

import { useTranslate } from './useTranslate';
import { getFieldLabelTranslationArgs } from '../util';
import { useResourceContext, useOptionalSourceContext } from '../core';

export const useTranslateLabel = () => {
    const translate = useTranslate();
    const resourceFromContext = useResourceContext();
    const sourceContext = useOptionalSourceContext();

    return useCallback(
        ({
            source,
            label,
            resource,
        }: {
            source?: string;
            label?: ReactNode;
            resource?: string;
        }) => {
            if (label === false || label === '') {
                return null;
            }

            if (label && typeof label !== 'string') {
                return label;
            }

            return translate(
                ...getFieldLabelTranslationArgs({
                    label: label as string,
                    defaultLabel: source
                        ? sourceContext?.getLabel(source)
                        : undefined,
                    resource,
                    resourceFromContext,
                    source,
                })
            );
        },
        [resourceFromContext, translate, sourceContext]
    );
};
