export const NodeTypeLabels = {
  // Block types
  paragraph: {
    label: 'Text',
    keyboard: undefined,
    keywords: ['paragraph']
  },
  h1: {
    label: 'Heading 1',
    keyboard: undefined,
    keywords: ['title', 'h1']
  },
  h2: {
    label: 'Heading 2',
    keyboard: undefined,
    keywords: ['subtitle', 'h2']
  },
  h3: {
    label: 'Heading 3',
    keyboard: undefined,
    keywords: ['subtitle', 'h3']
  },
  h4: {
    label: 'Heading 4',
    keyboard: undefined,
    keywords: ['subtitle', 'h4']
  },
  h5: {
    label: 'Heading 5',
    keyboard: undefined,
    keywords: ['subtitle', 'h5']
  },
  h6: {
    label: 'Heading 6',
    keyboard: undefined,
    keywords: ['subtitle', 'h6']
  },
  bulletedList: {
    label: 'Bulleted list',
    keyboard: undefined,
    keywords: ['unordered', 'ul', '-']
  },
  numberedList: {
    label: 'Numbered list',
    keyboard: undefined,
    keywords: ['ordered', 'ol', '1']
  },
  todoList: {
    label: 'To-do list',
    keyboard: undefined,
    keywords: ['checklist', 'task', 'checkbox', '[]']
  },
  toggleList: {
    label: 'Toggle list',
    keyboard: undefined,
    keywords: ['collapsible', 'expandable']
  },
  codeBlock: {
    label: 'Code',
    keyboard: undefined,
    keywords: ['```']
  },
  blockquote: {
    label: 'Quote',
    keyboard: undefined,
    keywords: ['citation', 'blockquote', '>']
  },
  columnsThree: {
    label: '3 columns',
    keyboard: undefined,
    keywords: []
  },

  // Text formatting
  bold: {
    label: 'Bold',
    keyboard: '⌘+B',
    keywords: []
  },
  italic: {
    label: 'Italic',
    keyboard: '⌘+I',
    keywords: []
  },
  underline: {
    label: 'Underline',
    keyboard: '⌘+U',
    keywords: []
  },
  strikethrough: {
    label: 'Strikethrough',
    keyboard: '⌘+⇧+M',
    keywords: []
  },
  code: {
    label: 'Code',
    keyboard: '⌘+E',
    keywords: []
  },
  highlight: {
    label: 'Highlight',
    keyboard: undefined,
    keywords: []
  },
  textColor: {
    label: 'Text color',
    keyboard: undefined,
    keywords: []
  },
  backgroundColor: {
    label: 'Background color',
    keyboard: undefined,
    keywords: []
  },

  // Actions
  undo: {
    label: 'Undo',
    keyboard: '⌘+Z',
    keywords: []
  },
  redo: {
    label: 'Redo',
    keyboard: '⌘+⇧+Z',
    keywords: []
  },
  link: {
    label: 'Link',
    keyboard: '⌘+K',
    keywords: []
  },
  formatCode: {
    label: 'Format code',
    keyboard: undefined,
    keywords: []
  },
  copy: {
    label: 'Copy',
    keyboard: undefined,
    keywords: []
  },
  plainText: {
    label: 'Plain text',
    keyboard: undefined,
    keywords: []
  },
  searchLanguage: {
    label: 'Search language...',
    keyboard: undefined,
    keywords: []
  },
  noLanguageFound: {
    label: 'No language found.',
    keyboard: undefined,
    keywords: []
  },

  // Structure
  turnInto: {
    label: 'Turn into',
    keyboard: undefined,
    keywords: []
  },
  insert: {
    label: 'Insert',
    keyboard: undefined,
    keywords: []
  },
  align: {
    label: 'Align',
    keyboard: undefined,
    keywords: []
  },
  indent: {
    label: 'Indent',
    keyboard: '⇥',
    keywords: []
  },
  outdent: {
    label: 'Outdent',
    keyboard: '⇧+⇥',
    keywords: []
  },

  // Tools
  table: {
    label: 'Table',
    keyboard: undefined,
    keywords: []
  },
  emoji: {
    label: 'Emoji',
    keyboard: undefined,
    keywords: []
  },
  equation: {
    label: 'Equation',
    keyboard: undefined,
    keywords: []
  },
  addTexEquation: {
    label: 'Add a Tex equation',
    keyboard: undefined,
    keywords: []
  },
  newEquation: {
    label: 'New equation',
    keyboard: undefined,
    keywords: []
  },
  done: {
    label: 'Done',
    keyboard: undefined,
    keywords: []
  },
  comment: {
    label: 'Comment',
    keyboard: '⌘+⇧+C',
    keywords: []
  },

  // Lists
  todo: {
    label: 'Todo',
    keyboard: undefined,
    keywords: []
  },
  toggle: {
    label: 'Toggle',
    keyboard: undefined,
    keywords: []
  },

  // Media
  audio: {
    label: 'Audio',
    keyboard: undefined,
    keywords: ['sound', 'mp3', 'wav', 'music']
  },
  video: {
    label: 'Video',
    keyboard: undefined,
    keywords: ['mp4', 'movie', 'film']
  },
  image: {
    label: 'Image',
    keyboard: undefined,
    keywords: ['photo', 'picture', 'jpg', 'png', 'gif']
  },
  file: {
    label: 'File',
    keyboard: undefined,
    keywords: ['document', 'pdf', 'attachment']
  },
  insertAudio: {
    label: 'Insert Audio',
    keyboard: undefined,
    keywords: []
  },
  insertVideo: {
    label: 'Insert Video',
    keyboard: undefined,
    keywords: []
  },
  insertImage: {
    label: 'Insert Image',
    keyboard: undefined,
    keywords: []
  },
  insertFile: {
    label: 'Insert File',
    keyboard: undefined,
    keywords: []
  },
  uploadFromComputer: {
    label: 'Upload from computer',
    keyboard: undefined,
    keywords: []
  },
  insertViaUrl: {
    label: 'Insert via URL',
    keyboard: undefined,
    keywords: []
  },
  editLink: {
    label: 'Edit link',
    keyboard: undefined,
    keywords: []
  },
  caption: {
    label: 'Caption',
    keyboard: undefined,
    keywords: []
  },
  pasteEmbedLink: {
    label: 'Paste the embed link...',
    keyboard: undefined,
    keywords: []
  },
  addAudioFile: {
    label: 'Add an audio file',
    keyboard: undefined,
    keywords: []
  },
  addFile: {
    label: 'Add a file',
    keyboard: undefined,
    keywords: []
  },
  addImage: {
    label: 'Add an image',
    keyboard: undefined,
    keywords: []
  },
  addVideo: {
    label: 'Add a video',
    keyboard: undefined,
    keywords: []
  },
  addMediaEmbed: {
    label: 'Add a media embed',
    keyboard: undefined,
    keywords: []
  },

  // Import/Export
  export: {
    label: 'Export',
    keyboard: undefined,
    keywords: []
  },
  import: {
    label: 'Import',
    keyboard: undefined,
    keywords: []
  },
  importFromHtml: {
    label: 'Import from HTML',
    keyboard: undefined,
    keywords: []
  },
  importFromMarkdown: {
    label: 'Import from Markdown',
    keyboard: undefined,
    keywords: []
  },
  exportAsHtml: {
    label: 'Export as HTML',
    keyboard: undefined,
    keywords: []
  },
  exportAsPdf: {
    label: 'Export as PDF',
    keyboard: undefined,
    keywords: []
  },
  exportAsImage: {
    label: 'Export as Image',
    keyboard: undefined,
    keywords: []
  },
  exportAsMarkdown: {
    label: 'Export as Markdown',
    keyboard: undefined,
    keywords: []
  },
  pdfExportedSuccessfully: {
    label: 'PDF exported successfully',
    keyboard: undefined,
    keywords: []
  },
  failedToExportPdf: {
    label: 'Failed to export PDF',
    keyboard: undefined,
    keywords: []
  },
  imageExportedSuccessfully: {
    label: 'Image exported successfully',
    keyboard: undefined,
    keywords: []
  },
  failedToExportImage: {
    label: 'Failed to export image',
    keyboard: undefined,
    keywords: []
  },
  htmlExportedSuccessfully: {
    label: 'HTML exported successfully',
    keyboard: undefined,
    keywords: []
  },
  failedToExportHtml: {
    label: 'Failed to export HTML',
    keyboard: undefined,
    keywords: []
  },
  markdownExportedSuccessfully: {
    label: 'Markdown exported successfully',
    keyboard: undefined,
    keywords: []
  },
  failedToExportMarkdown: {
    label: 'Failed to export Markdown',
    keyboard: undefined,
    keywords: []
  },

  // Layout
  lineHeight: {
    label: 'Line height',
    keyboard: undefined,
    keywords: []
  },
  fontSize: {
    label: 'Font size',
    keyboard: undefined,
    keywords: []
  },

  // Modes
  mode: {
    label: 'Editing mode',
    keyboard: undefined,
    keywords: []
  },
  suggestion: {
    label: 'Suggestion edits',
    keyboard: undefined,
    keywords: []
  },
  suggestionOff: {
    label: 'Turn off suggesting',
    keyboard: undefined,
    keywords: []
  },

  // More menu items
  keyboardInput: {
    label: 'Keyboard input',
    keyboard: undefined,
    keywords: []
  },
  superscript: {
    label: 'Superscript',
    keyboard: '⌘+,',
    keywords: []
  },
  subscript: {
    label: 'Subscript',
    keyboard: '⌘+.',
    keywords: []
  },

  // AI
  ai: {
    label: 'AI commands',
    keyboard: undefined,
    keywords: []
  },
  aiChat: {
    label: 'AI',
    keyboard: undefined,
    keywords: []
  },
  callout: {
    label: 'Callout',
    keyboard: undefined,
    keywords: ['note']
  },

  // More
  more: {
    label: 'More',
    keyboard: undefined,
    keywords: []
  },

  // Alignment options
  alignLeft: {
    label: 'Align left',
    keyboard: undefined,
    keywords: []
  },
  alignCenter: {
    label: 'Align center',
    keyboard: undefined,
    keywords: []
  },
  alignRight: {
    label: 'Align right',
    keyboard: undefined,
    keywords: []
  },
  alignJustify: {
    label: 'Justify',
    keyboard: undefined,
    keywords: []
  },

  // Additional insert items
  divider: {
    label: 'Divider',
    keyboard: undefined,
    keywords: []
  },
  embed: {
    label: 'Embed',
    keyboard: undefined,
    keywords: []
  },
  tableOfContents: {
    label: 'Table of contents',
    keyboard: undefined,
    keywords: ['toc']
  },
  date: {
    label: 'Date',
    keyboard: undefined,
    keywords: ['time']
  },
  inlineEquation: {
    label: 'Inline Equation',
    keyboard: undefined,
    keywords: []
  }
} as const;

// Group labels for menus
export const MenuGroupLabels = {
  basicBlocks: 'Basic blocks',
  lists: 'Lists',
  media: 'Media',
  advancedBlocks: 'Advanced blocks',
  inline: 'Inline'
} as const;

export const createLabel = (type: keyof typeof NodeTypeLabels, includeKeyboard = true) => {
  const config = NodeTypeLabels[type];
  if (includeKeyboard && config.keyboard) {
    return `${config.label} (${config.keyboard})`;
  }
  return config.label;
};

// Helper to create menu items from label config
export const createMenuItem = (
  type: keyof typeof NodeTypeLabels,
  value: string,
  icon: React.ReactNode
) => {
  const config = NodeTypeLabels[type];
  return {
    icon,
    label: config.label,
    keywords: config.keywords,
    value
  };
};
