/**
 * @license
 * Copyright 2025 Google LLC
 * SPDX-License-Identifier: Apache-2.0
 */

import { lerp } from '../../utils/math.js';
import { type LoadedSettings } from '../../config/settings.js';
import { isAlternateBufferEnabled } from '../hooks/useAlternateBuffer.js';

const getMainAreaWidthInternal = (terminalWidth: number): number => {
  if (terminalWidth <= 80) {
    return Math.round(0.98 * terminalWidth);
  }
  if (terminalWidth >= 132) {
    return Math.round(0.9 * terminalWidth);
  }

  // Linearly interpolate between 80 columns (98%) and 132 columns (90%).
  const t = (terminalWidth - 80) / (132 - 80);
  const percentage = lerp(98, 90, t);

  return Math.round(percentage * terminalWidth * 0.01);
};

export const calculateMainAreaWidth = (
  terminalWidth: number,
  settings: LoadedSettings,
): number => {
  if (settings.merged.ui?.useFullWidth) {
    if (isAlternateBufferEnabled(settings)) {
      return terminalWidth - 1;
    }
    return terminalWidth;
  }
  return getMainAreaWidthInternal(terminalWidth);
};
