import 'dart:math' as math;
import 'dart:ui';

/// Deterministic serpentine layout for the journey map. Stage 0 is at the
/// bottom; the path snakes upward. Works for any stage count.
class MapLayout {
  const MapLayout({
    required this.width,
    this.nodeSpacing = 108,
    this.topPadding = 140,
    this.bottomPadding = 150,
  });

  final double width;
  final double nodeSpacing;
  final double topPadding;
  final double bottomPadding;

  double get amplitude => width * 0.26;

  double heightFor(int count) =>
      topPadding + bottomPadding + (count - 1) * nodeSpacing;

  Offset nodeCenter(int index, int count) {
    final y = heightFor(count) - bottomPadding - index * nodeSpacing;
    final x = width / 2 + amplitude * math.sin(index * 1.05);
    return Offset(x, y);
  }
}
