import type {RouteLocation} from 'vue-router'

import {isAppleDevice} from '@/helpers/isAppleDevice'

const ctrl = isAppleDevice() ? '⌘' : 'ctrl'

interface Shortcut {
	title: string
	keys: string[]
	combination?: 'then'
}

interface ShortcutGroup {
	title: string
	available?: (route: RouteLocation) => boolean
	shortcuts: Shortcut[]
}

export const KEYBOARD_SHORTCUTS : ShortcutGroup[] = [
	{
		title: 'keyboardShortcuts.general',
		shortcuts: [
			{
				title: 'keyboardShortcuts.toggleMenu',
				keys: [ctrl, 'e'],
			},
			{
				title: 'keyboardShortcuts.quickSearch',
				keys: [ctrl, 'k'],
			},
		],
	},
	{
		title: 'keyboardShortcuts.navigation.title',
		shortcuts: [
			{
				title: 'keyboardShortcuts.navigation.overview',
				keys: ['g', 'o'],
				combination: 'then',
			},
			{
				title: 'keyboardShortcuts.navigation.upcoming',
				keys: ['g', 'u'],
				combination: 'then',
			},
			{
				title: 'keyboardShortcuts.navigation.namespaces',
				keys: ['g', 'n'],
				combination: 'then',
			},
			{
				title: 'keyboardShortcuts.navigation.labels',
				keys: ['g', 'a'],
				combination: 'then',
			},
			{
				title: 'keyboardShortcuts.navigation.teams',
				keys: ['g', 'm'],
				combination: 'then',
			},
		],
	},
	{
		title: 'project.kanban.title',
		available: (route) => route.name === 'project.kanban',
		shortcuts: [
			{
				title: 'keyboardShortcuts.task.done',
				keys: [ctrl, 'click'],
			},
		],
	},
	{
		title: 'keyboardShortcuts.project.title',
		available: (route) => (route.name as string)?.startsWith('project.'),
		shortcuts: [
			{
				title: 'keyboardShortcuts.project.switchToListView',
				keys: ['g', 'l'],
				combination: 'then',
			},
			{
				title: 'keyboardShortcuts.project.switchToGanttView',
				keys: ['g', 'g'],
				combination: 'then',
			},
			{
				title: 'keyboardShortcuts.project.switchToTableView',
				keys: ['g', 't'],
				combination: 'then',
			},
			{
				title: 'keyboardShortcuts.project.switchToKanbanView',
				keys: ['g', 'k'],
				combination: 'then',
			},
		],
	},
	{
		title: 'keyboardShortcuts.task.title',
		available: (route) => route.name === 'task.detail',
		shortcuts: [
			{
				title: 'keyboardShortcuts.task.done',
				keys: ['t'],
			},
			{
				title: 'keyboardShortcuts.task.assign',
				keys: ['a'],
			},
			{
				title: 'keyboardShortcuts.task.labels',
				keys: ['l'],
			},
			{
				title: 'keyboardShortcuts.task.dueDate',
				keys: ['d'],
			},
			{
				title: 'keyboardShortcuts.task.attachment',
				keys: ['f'],
			},
			{
				title: 'keyboardShortcuts.task.related',
				keys: ['r'],
			},
			{
				title: 'keyboardShortcuts.task.move',
				keys: ['m'],
			},
			{
				title: 'keyboardShortcuts.task.color',
				keys: ['c'],
			},
			{
				title: 'keyboardShortcuts.task.reminder',
				keys: ['alt', 'r'],
			},
			{
				title: 'keyboardShortcuts.task.description',
				keys: ['e'],
			},
		],
	},
]
