// lib/editor/layout/viewport_fit.dart
//
// Pure fit/centering math for the viewport's initial transform + the reader
// "fit width / fit page" actions (F3). Today this lives as untested ad-hoc
// arithmetic in pen_editor_screen._centerPage; extracting it here makes it
// testable and shared by the new viewport widget.
//
// Content coordinates are scale-1 logical px; the returned scale + offset place
// content inside the viewport. No widgets beyond dart:ui Size/Offset.

import 'dart:ui' show Offset, Size;

/// Scale so content width fills the viewport width (fit-to-width, the
/// continuous-single default). 0 for non-positive content width.
double fitWidthScale(Size content, double viewportWidth) {
  if (content.width <= 0) return 0;
  return viewportWidth / content.width;
}

/// Scale so the whole content fits inside the viewport (letterboxed) —
/// min(widthFit, heightFit). 0 for non-positive content extents.
double fitPageScale(Size content, Size viewport) {
  if (content.width <= 0 || content.height <= 0) return 0;
  final w = viewport.width / content.width;
  final h = viewport.height / content.height;
  return w < h ? w : h;
}

/// Top-left translation that centers [content] scaled by [scale] within
/// [viewport]. When the scaled content is larger than the viewport on an axis
/// the offset is negative (content overflows equally on both sides).
Offset centerOffset(Size content, Size viewport, double scale) {
  final scaledW = content.width * scale;
  final scaledH = content.height * scale;
  return Offset(
    (viewport.width - scaledW) / 2.0,
    (viewport.height - scaledH) / 2.0,
  );
}
