/// アプリケーション全体で使用する定数を定義
///
/// マジックナンバーをここに集約することで、保守性と一貫性を向上させます。
///
/// 使用例:
/// ```dart
/// import '../constants/app_constants.dart';
///
/// final quality = AppConstants.imageCompressionQuality;
/// ```
class AppConstants {
  // Private constructor to prevent instantiation
  AppConstants._();

  // ===== 画像圧縮設定 =====

  /// JPEG圧縮品質（デフォルト）
  ///
  /// 品質と容量のバランスを考慮した値
  /// - 使用箇所: セット商品ダイアログ、ギャラリー画像選択
  static const int imageCompressionQuality = 85;

  /// 画像最大サイズ - Gemini API用（長辺）
  ///
  /// Gemini APIのトークン消費を削減するため、1024pxに制限
  /// - 使用箇所: カメラ撮影、OCR処理
  static const int imageMaxDimensionGemini = 1024;

  /// 画像最大サイズ - ギャラリー用（長辺）
  ///
  /// 高品質表示と容量削減のバランス
  /// - 使用箇所: ギャラリー画像選択（将来実装予定）
  static const int imageMaxDimensionGallery = 2000;

  /// ギャラリー画像圧縮品質
  ///
  /// より高品質な保存用
  /// - 使用箇所: ギャラリー画像の圧縮処理
  static const int imageCompressionQualityGallery = 90;

  // ===== 機能制限設定 =====

  /// MBTI診断の最小件数
  ///
  /// 診断精度を確保するために必要な最小データ数
  /// - 使用箇所: ソムリエ画面（AIソムリエ診断）
  static const int mbtiMinimumRecords = 5;

  /// レコメンド表示件数
  ///
  /// 詳細画面で表示するレコメンドの最大数
  /// - 使用箇所: sake_detail_screen.dart
  static const int recommendationLimit = 10;

  // ===== バッジ取得条件 =====

  /// バッジ「コレクター」取得に必要な件数
  ///
  /// 50本以上登録でバッジ解除
  /// - 使用箇所: gamification_service.dart
  static const int collectorBadgeThreshold = 50;

  /// 辛口サムライバッジの日本酒度閾値
  ///
  /// 日本酒度 +5.0以上の日本酒を一定数飲んだユーザー向け
  /// - 使用箇所: gamification_service.dart
  static const double dryTypeSakeMeterThreshold = 5.0;

  // ===== UI設定 =====

  /// 開発者モード起動に必要なタップ回数
  ///
  /// 設定画面のバージョン表示を連続タップでデバッグメニュー表示
  /// - 使用箇所: other_settings_section.dart
  static const int devModeTapCount = 5;

  /// 信頼度スコア閾値（高）
  ///
  /// OCR認識結果の信頼度が80%以上で高精度と判定
  /// - 使用箇所: sake_detail_screen.dart
  static const int confidenceScoreHigh = 80;

  /// 信頼度スコア閾値（中）
  ///
  /// OCR認識結果の信頼度が50%以上で中程度と判定
  /// - 使用箇所: sake_detail_screen.dart
  static const int confidenceScoreMedium = 50;
}
