import 'package:equatable/equatable.dart';
import 'package:flutter/material.dart';
import 'package:hydrated_bloc/hydrated_bloc.dart';

import 'package:jeweled/models/settings_global.dart';
import 'package:jeweled/utils/tools.dart';

part 'settings_global_state.dart';

class GlobalSettingsCubit extends HydratedCubit<GlobalSettingsState> {
  GlobalSettingsCubit() : super(GlobalSettingsState(settings: GlobalSettings.createDefault()));

  void setValues({
    int? colorsTheme,
    int? graphicTheme,
  }) {
    emit(
      GlobalSettingsState(
        settings: GlobalSettings(
          colorsTheme: colorsTheme ?? state.settings.colorsTheme,
          graphicTheme: graphicTheme ?? state.settings.graphicTheme,
        ),
      ),
    );
  }

  int getParameterValue(String code) {
    switch (code) {
      case 'colorsTheme':
        return GlobalSettings.getColorsThemeValueFromUnsafe(state.settings.colorsTheme);
      case 'graphicTheme':
        return GlobalSettings.getGraphicThemeValueFromUnsafe(state.settings.graphicTheme);
    }
    return 0;
  }

  void setParameterValue(String code, int value) {
    printlog('GlobalSettingsCubit.setParameterValue');
    printlog('code: $code  / value: $value');

    int colorsTheme = code == 'colorsTheme' ? value : getParameterValue('colorsTheme');
    int graphicTheme = code == 'graphicTheme' ? value : getParameterValue('graphicTheme');

    setValues(
      colorsTheme: colorsTheme,
      graphicTheme: graphicTheme,
    );
  }

  @override
  GlobalSettingsState? fromJson(Map<String, dynamic> json) {
    int colorsTheme = json['colorsTheme'] as int;
    int graphicTheme = json['graphicTheme'] as int;

    return GlobalSettingsState(
      settings: GlobalSettings(
        colorsTheme: colorsTheme,
        graphicTheme: graphicTheme,
      ),
    );
  }

  @override
  Map<String, dynamic>? toJson(GlobalSettingsState state) {
    return <String, dynamic>{
      'colorsTheme': state.settings.colorsTheme,
      'graphicTheme': state.settings.graphicTheme,
    };
  }
}