export function formatTelemetryMouseButtonLabel(button: number): string {
  switch (button) {
    case 1:
      return 'левой';
    case 2:
      return 'правой';
    case 3:
      return 'средней';
    default:
      return `дополнительной (${button})`;
  }
}

export function formatTelemetryKeyboardKeyDisplay(key: string): string {
  const t = key.trim();
  if (t.toUpperCase() === 'META') {
    return 'Meta';
  }
  if (t.length === 1) {
    return t.toUpperCase();
  }
  return t;
}

export function formatTelemetryModifierTokens(modifiers: string): string {
  return modifiers
    .split('+')
    .map((t) => t.trim())
    .filter((t) => t.length > 0)
    .map((t) => {
      const u = t.toLowerCase();
      if (u === 'meta') {
        return '⌘';
      }
      if (u === 'shift') {
        return 'Shift';
      }
      if (u === 'control' || u === 'ctrl') {
        return 'Ctrl';
      }
      if (u === 'alt') {
        return 'Alt';
      }
      return t;
    })
    .join(' + ');
}

export function formatTelemetryMouseClickSummary(
  x: number,
  y: number,
  button: number,
  isDown: boolean,
): string {
  const phase = isDown ? 'Нажатие' : 'Отпускание';
  const btn = formatTelemetryMouseButtonLabel(button);
  return `${phase} ${btn} кнопки мыши в точке (${x}, ${y})`;
}

export function formatTelemetryMouseMoveSummary(x: number, y: number, button: number | null): string {
  if (button !== null) {
    return `Перемещение указателя — (${x}, ${y}), кнопка ${button}`;
  }
  return `Перемещение указателя — (${x}, ${y})`;
}

export function formatTelemetryKeyboardKeySummary(
  action: 'press' | 'release',
  keyNameRaw: string,
  modifiersRaw: unknown,
): string {
  const actionRu = action === 'press' ? 'Нажатие' : 'Отпускание';
  const keyName = formatTelemetryKeyboardKeyDisplay(keyNameRaw);
  const modStr = modifiersRaw == null ? '' : String(modifiersRaw).trim();
  const noMods =
    modStr === '' || modStr.toLowerCase() === 'none' || modStr.toLowerCase() === 'null';

  let line = `${actionRu} клавиши «${keyName}»`;
  if (!noMods) {
    line += ` — ${formatTelemetryModifierTokens(modStr)}`;
  }
  return line;
}
