import type { Mask } from '../../Mask.js';
import type { Point } from '../../utils/geometry/points.js';
import { getExternalContour } from '../getExternalContour.ts';

/**
 * Get the pixels that surround an ROI. The pixels include the top and left borders,
 * but extend the right and bottom one by one pixel.
 * This allows to compute the minimum bounding rectangle with the correct surface.
 * This method is only used to calculate minimalBoundRectangle and convexHull.
 * @param mask - The ROI for which to get the extended border points.
 * @returns - The array of points.
 */
export function getExtendedBorderPoints(mask: Mask): Point[] {
  const borderPoints = getExternalContour(mask);

  const result: Point[] = [];

  for (const point of borderPoints) {
    result.push(
      point,
      { column: point.column + 1, row: point.row },
      { column: point.column + 1, row: point.row + 1 },
      { column: point.column, row: point.row + 1 },
    );
  }

  return result;
}
