import 'package:flutter/cupertino.dart';
import 'package:shared_preferences/shared_preferences.dart';

class AppLanguage{
  static final AppLanguage _singleton = AppLanguage._internal();

  Locale _appLocale = Locale('en');

  factory AppLanguage() {
    return _singleton;
  }

  AppLanguage._internal();

  static Future<AppLanguage> getInstance() async {
    return _singleton;
  }

  Locale get appLocal => _appLocale ?? Locale("en");

  Future<void> fetchLocale() async {
    var prefs = await SharedPreferences.getInstance();
    String langCode = prefs.getString('language_code');
    print(" ---- lang code $langCode");
    if ( langCode == null) {
      _appLocale = Locale('en');
    } else {
      _appLocale = Locale(langCode);
    }
    print(" ---- Fetched lang: " + _appLocale.toString());
  }

  getLocale(SharedPreferences prefs) {
    String langCode = prefs.getString('language_code');
    if ( langCode == null) {
      _appLocale = Locale('en');
      langCode = "en";
    }
    _appLocale = Locale(langCode);
    print(" ---- Get lang: " + _appLocale.toString() + " lang code $langCode");

  }


  void changeLanguage(Locale type) async {
    var prefs = await SharedPreferences.getInstance();
    if (_appLocale == type) {
      return;
    }
    if (type == Locale("hu")) {
      _appLocale = Locale("hu");
      await prefs.setString('language_code', 'hu');
      await prefs.setString('countryCode', 'HU');
    } else {
      _appLocale = Locale("en");
      await prefs.setString('language_code', 'en');
      await prefs.setString('countryCode', 'US');
    }
    print(" ---- Stored lang: " + _appLocale.toString());
  }
}