import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';

import 'package:jeweled/config/default_global_settings.dart';
import 'package:jeweled/models/settings/settings_global.dart';

part 'settings_global_state.dart';

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

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

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

  void setParameterValue(String code, String value) {
    final String colorsTheme = code == DefaultGlobalSettings.parameterCodeColorsTheme
        ? value
        : getParameterValue(DefaultGlobalSettings.parameterCodeColorsTheme);
    final String graphicTheme = code == DefaultGlobalSettings.parameterCodeGraphicsTheme
        ? value
        : getParameterValue(DefaultGlobalSettings.parameterCodeGraphicsTheme);

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

  @override
  GlobalSettingsState? fromJson(Map<String, dynamic> json) {
    final String colorsTheme = json[DefaultGlobalSettings.parameterCodeColorsTheme] as String;
    final String graphicTheme =
        json[DefaultGlobalSettings.parameterCodeGraphicsTheme] as String;

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

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