import 'package:flutter/material.dart';
import 'package:hive/hive.dart';
import 'dart:ui' as ui;

class LocaleProvider extends ChangeNotifier {
  late Box<String> _localeBox;
  Locale _locale = const Locale('ko');

  static const List<String> supportedLanguages = ['en', 'ko', 'ja', 'zh'];

  Locale get locale => _locale;

  Future<void> init() async {
    _localeBox = await Hive.openBox<String>('locale');

    // 저장된 언어 설정 확인
    final savedLocale = _localeBox.get('locale');

    if (savedLocale != null) {
      // 저장된 언어가 있으면 사용
      _locale = Locale(savedLocale);
    } else {
      // 저장된 언어가 없으면 시스템 언어 감지
      final systemLocale = ui.PlatformDispatcher.instance.locale;

      // 시스템 언어가 지원되는 언어인지 확인
      if (supportedLanguages.contains(systemLocale.languageCode)) {
        _locale = Locale(systemLocale.languageCode);
      } else {
        // 지원되지 않는 언어면 영어 사용
        _locale = const Locale('en');
      }

      // 감지된 언어 저장
      await _localeBox.put('locale', _locale.languageCode);
    }

    notifyListeners();
  }

  Future<void> setLocale(String languageCode) async {
    if (_locale.languageCode != languageCode) {
      _locale = Locale(languageCode);
      await _localeBox.put('locale', languageCode);
      notifyListeners();
    }
  }
}
