import 'package:flutter/material.dart';
import 'package:flutter_habit/common/LocalData.dart';
import 'package:shared_preferences/shared_preferences.dart';

class ConfigProvider extends ChangeNotifier {
  late int getUpTimeStart;
  int? getUpTimeEnd;

  late int breakfastTimeStart;
  int? breakfastTimeEnd;

  late int lunchTimeStart;
  int? lunchTimeEnd;

  late int midRestTimeStart;
  int? midRestTimeEnd;

  late int dinnerTimeStart;
  int? dinnerTimeEnd;

  late int restTimeStart;
  int? restTimeEnd;

  void init() {
    load();
    store();

    debugPrint("""init ConfigProvider to:
      getUpTimeStart = ${DateTime.fromMillisecondsSinceEpoch(getUpTimeStart).toString().substring(11, 16)}
      getUpTimeEnd = ${DateTime.fromMillisecondsSinceEpoch(getUpTimeEnd!).toString().substring(11, 16)}
      
      breakfastTimeStart = ${DateTime.fromMillisecondsSinceEpoch(breakfastTimeStart).toString().substring(11, 16)}
      breakfastTimeEnd = ${DateTime.fromMillisecondsSinceEpoch(breakfastTimeEnd!).toString().substring(11, 16)}
      
      midRestTimeStart = ${DateTime.fromMillisecondsSinceEpoch(midRestTimeStart).toString().substring(11, 16)}
      midRestTimeEnd = ${DateTime.fromMillisecondsSinceEpoch(midRestTimeEnd!).toString().substring(11, 16)}
      
      lunchTimeStart = ${DateTime.fromMillisecondsSinceEpoch(lunchTimeStart).toString().substring(11, 16)}
      lunchTimeEnd = ${DateTime.fromMillisecondsSinceEpoch(lunchTimeEnd!).toString().substring(11, 16)}
      
      dinnerTimeStart = ${DateTime.fromMillisecondsSinceEpoch(dinnerTimeStart).toString().substring(11, 16)}
      dinnerTimeEnd = ${DateTime.fromMillisecondsSinceEpoch(dinnerTimeEnd!).toString().substring(11, 16)}
      
      restTimeStart = ${DateTime.fromMillisecondsSinceEpoch(restTimeStart).toString().substring(11, 16)}
      restTimeEnd = ${DateTime.fromMillisecondsSinceEpoch(restTimeEnd!).toString().substring(11, 16)}
      """);
  }

  void load() {
    SharedPreferences sp = LocalData.getInstance()!;
    getUpTimeStart = sp.getInt("getUpTimeStart") ?? DateTime(1,1,1,6).millisecondsSinceEpoch;
    getUpTimeEnd = sp.getInt("getUpTimeEnd") ?? DateTime(1,1,1,7).millisecondsSinceEpoch;

    breakfastTimeStart = sp.getInt("breakfastTimeStart") ?? DateTime(1,1,1,7).millisecondsSinceEpoch;
    breakfastTimeEnd = sp.getInt("breakfastTimeEnd") ?? DateTime(1,1,1,8).millisecondsSinceEpoch;

    lunchTimeStart = sp.getInt("lunchTimeStart") ?? DateTime(1,1,1,12).millisecondsSinceEpoch;
    lunchTimeEnd = sp.getInt("lunchTimeEnd") ?? DateTime(1,1,1,13).millisecondsSinceEpoch;

    midRestTimeStart = sp.getInt("midRestTimeStart") ?? DateTime(1,1,1,13).millisecondsSinceEpoch;
    midRestTimeEnd = sp.getInt("midRestTimeEnd") ?? DateTime(1,1,1,14).millisecondsSinceEpoch;

    dinnerTimeStart = sp.getInt("dinnerTimeStart") ?? DateTime(1,1,1,17).millisecondsSinceEpoch;
    dinnerTimeEnd = sp.getInt("dinnerTimeEnd") ?? DateTime(1,1,1,18).millisecondsSinceEpoch;

    restTimeStart = sp.getInt("restTimeStart") ?? DateTime(1,1,1,21).millisecondsSinceEpoch;
    restTimeEnd = sp.getInt("restTimeEnd") ?? DateTime(1,1,1,22).millisecondsSinceEpoch;
  }

  void store() {
    SharedPreferences sp = LocalData.getInstance()!;
    sp.setInt("getUpTimeStart", getUpTimeStart);
    sp.setInt("getUpTimeEnd", getUpTimeEnd!);

    sp.setInt("breakfastTimeStart", breakfastTimeStart);
    sp.setInt("breakfastTimeEnd", breakfastTimeEnd!);

    sp.setInt("lunchTimeStart", lunchTimeStart);
    sp.setInt("lunchTimeEnd", lunchTimeEnd!);

    sp.setInt("midRestTimeStart", midRestTimeStart);
    sp.setInt("midRestTimeEnd", midRestTimeEnd!);

    sp.setInt("dinnerTimeStart", dinnerTimeStart);
    sp.setInt("dinnerTimeEnd", dinnerTimeEnd!);

    sp.setInt("restTimeStart", restTimeStart);
    sp.setInt("restTimeEnd", restTimeEnd!);
  }

  void refresh() {
    notifyListeners();
  }

}