import { format as dateFnsFormat } from 'date-fns/format';
import mustache from 'mustache';
import path from 'path';

import { useCurrentPagePath } from '~/states/page';
import loggerFactory from '~/utils/logger';

const logger = loggerFactory('growi:components:TemplateModal:use-formatter');

type FormatMethod = (markdown?: string) => string;
type FormatterData = {
  format: FormatMethod;
};

export const useFormatter = (): FormatterData => {
  const currentPagePath = useCurrentPagePath();

  const format: FormatMethod = (markdown) => {
    if (markdown == null) {
      return '';
    }

    // replace placeholder
    const now = new Date();
    try {
      return mustache.render(markdown, {
        title: path.basename(currentPagePath ?? '/'),
        path: currentPagePath ?? '/',
        yyyy: dateFnsFormat(now, 'yyyy'),
        MM: dateFnsFormat(now, 'MM'),
        dd: dateFnsFormat(now, 'dd'),
        HH: dateFnsFormat(now, 'HH'),
        mm: dateFnsFormat(now, 'mm'),
      });
    } catch (err) {
      logger.warn('An error occured while ejs processing.', err);
      return markdown;
    }
  };

  return { format };
};
