Newer
Older
SmTIAS-Capture / lib / providers / diagnostics_provider.dart
import 'package:flutter/foundation.dart';

import 'package:smtias_capture/services/file_service.dart';
import 'package:smtias_capture/services/raw_capture_service.dart';

/// カメラ診断機能の状態管理.
/// Camera2 API の能力を読み出し JSON ファイルに保存する.
class DiagnosticsProvider extends ChangeNotifier {
  final RawCaptureService _rawCaptureService;
  final FileService _fileService;

  DiagnosticsProvider({
    RawCaptureService? rawCaptureService,
    FileService? fileService,
  }) : _rawCaptureService = rawCaptureService ?? RawCaptureService(),
       _fileService = fileService ?? FileService();

  bool _isRunning = false;
  String? _lastSavedPath;
  String? _errorMessage;

  bool get isRunning => _isRunning;
  String? get lastSavedPath => _lastSavedPath;
  String? get errorMessage => _errorMessage;

  /// 診断を実行し,結果を JSON ファイルとして保存する.
  Future<void> runDiagnostics() async {
    if (_isRunning) return;

    _isRunning = true;
    _errorMessage = null;
    _lastSavedPath = null;
    notifyListeners();

    try {
      final diagnostics = await _rawCaptureService.getCameraDiagnostics();
      if (diagnostics == null) {
        _errorMessage = 'カメラ診断情報を取得できませんでした';
        _isRunning = false;
        notifyListeners();
        return;
      }

      final savedPath = await _fileService.saveDiagnosticsJson(diagnostics);
      await _rawCaptureService.scanFile(savedPath);

      _lastSavedPath = savedPath;
    } catch (e) {
      _errorMessage = '診断の実行に失敗しました: $e';
    }

    _isRunning = false;
    notifyListeners();
  }
}