import { useSearchParams } from 'next/navigation';
import { createContext, useEffect, useMemo, useState } from 'react';

export type EditMode =
  | 'replace'
  | 'crop'
  | 'remove'
  | 'extend'
  | 'fadeOut'
  | 'speed'
  | 'fixLyrics'
  | 'stems'
  | 'none';

export const getAnalyticsToolName = (editMode: EditMode) => {
  if (editMode === 'replace') {
    return 'infill';
  } else if (editMode === 'crop') {
    return 'crop';
  } else if (editMode === 'remove') {
    return 'remove';
  } else if (editMode === 'extend') {
    return 'extend';
  } else if (editMode === 'speed') {
    return 'change_speed';
  } else if (editMode === 'fadeOut') {
    return 'fade';
  } else if (editMode === 'fixLyrics') {
    return 'fixLyrics';
  } else if (editMode === 'stems') {
    return 'stems';
  } else {
    return 'none';
  }
};

export const useEditModeContext = () => {
  const searchParams = useSearchParams();
  const queryParamTool = useMemo(
    () => searchParams.get('tool'),
    [searchParams]
  );
  const [editMode, setEditMode] = useState<EditMode>(() => {
    if (queryParamTool === 'crop') return 'crop';
    if (queryParamTool === 'infill') return 'replace';
    return 'none';
  });

  const [lastAppliedEditType, setLastAppliedEditType] =
    useState<EditMode>('none');

  useEffect(() => {
    if (queryParamTool === 'crop') setEditMode('crop');
    if (queryParamTool === 'infill') setEditMode('replace');
    if (queryParamTool === 'speed') setEditMode('speed');
  }, [queryParamTool]);

  return useMemo(
    () => ({
      editMode,
      setEditMode,
      setLastAppliedEditType,
      lastAppliedEditType,
    }),
    [editMode, setEditMode, lastAppliedEditType, setLastAppliedEditType]
  );
};

const EditModeContext = createContext<ReturnType<typeof useEditModeContext>>(
  undefined as never
);

export default EditModeContext;
