import { isDesktop } from "react-device-detect";
import { MonacoEditor } from "./MonacoEditor";
import { CodeMirrorEditor } from "./CodeMirrorEditor";

/**
 * Provides an interface for a Code Editor, to enable easy swapping between different implementations
 */
export type CodeEditorProps = {
  initialContent: string;
  yamlSchemaUrl: string;
  onDidChangeContent: (content: string) => void;
};

/** Used to swap between the Monaco editor and the CodeMirror editor depending on device type.
 * The Monaco editor doesn't work well on mobile devices, see Github issue: https://github.com/microsoft/monaco-editor/issues/246
 *
 * A common solution is to switch to CodeMirror on mobile devices as they have invested significantly in touch support.
 *
 * It would be great to revisit this in in the future if/when Monaco improves mobile support.
 */
export const CodeEditor: (props: CodeEditorProps) => JSX.Element = isDesktop
  ? MonacoEditor
  : CodeMirrorEditor;
