// lib/editor/pdf/spike_main.dart
//
// Standalone entry point for the THROWAWAY M1 pdfrx spike (plan §10).
//
// Launch on the Windows tablet (or any desktop with a display):
//   flutter run -t lib/editor/pdf/spike_main.dart
//
// It opens test/assets/large_300p.pdf in [SpikeEditorPane] with the
// frame-timing HUD and ink-load toggle, so the M1 perf/pen gates are
// observable on-device.
//
// IMPORTANT: pen capture requires the kind-aware [PenCaptureBinding] (installed
// below before pdfrx init). pdfrx itself is initialized via
// pdfrxFlutterInitialize() — confirmed from pdfrx 2.4.4 example/pdf_combine.

import 'dart:io';

import 'package:flutter/material.dart';
import 'package:pdfrx/pdfrx.dart';

import 'pen_capture_region.dart';
import 'spike_app.dart';

/// Default benchmark asset (300-page PDF generated by tool/gen_bench_pdf.dart).
const String _kDefaultPdfRelPath = 'test/assets/large_300p.pdf';

/// Filesystem path for the synthetic ink load (regenerate via
/// tool/gen_dense_strokes.dart; not bundled — read from disk at the project root).
const String _kDenseStrokesAsset = 'test/assets/dense_strokes.json';

void main(List<String> args) {
  // Kind-aware binding MUST be installed before runApp so PenCaptureRegion can
  // gate hit-testing by pointer kind (see pen_capture_region.dart header).
  PenCaptureBinding.ensureInitialized();
  // pdfrx native engine init (pdfrx 2.4.4 example pattern).
  pdfrxFlutterInitialize();

  // Allow overriding the PDF path as the first CLI arg (otherwise the default
  // 300-page bench asset relative to the project root / cwd).
  final pdfPath = args.isNotEmpty ? args.first : _resolvePdfPath();

  runApp(
    SpikeApp(
      pdfPath: pdfPath,
      denseStrokesAsset: _kDenseStrokesAsset,
    ),
  );
}

/// Resolve the bench PDF path. `flutter run` sets cwd to the project root, so
/// the relative asset path works on desktop; we also try a couple of fallbacks.
String _resolvePdfPath() {
  final candidates = <String>[
    _kDefaultPdfRelPath,
    '${Directory.current.path}/$_kDefaultPdfRelPath',
  ];
  for (final c in candidates) {
    if (File(c).existsSync()) return c;
  }
  // Return the primary path anyway; pdfrx will surface a clear load error.
  return _kDefaultPdfRelPath;
}
