import KeyValueStore from "discourse/lib/key-value-store";
import Service from "@ember/service";

const EMOJI_USAGE = "emojiUsage";
const EMOJI_SELECTED_DIVERSITY = "emojiSelectedDiversity";
const TRACKED_EMOJIS = 15;
const STORE_NAMESPACE = "discourse_emojis_";

export default Service.extend({
  init() {
    this._super(...arguments);

    this.store = new KeyValueStore(STORE_NAMESPACE);

    if (!this.store.getObject(EMOJI_USAGE)) {
      this.favorites = [];
    }
  },

  get diversity() {
    return this.store.getObject(EMOJI_SELECTED_DIVERSITY) || 1;
  },

  set diversity(value) {
    this.store.setObject({ key: EMOJI_SELECTED_DIVERSITY, value: value || 1 });
  },

  get favorites() {
    return this.store.getObject(EMOJI_USAGE) || [];
  },

  set favorites(value) {
    this.store.setObject({ key: EMOJI_USAGE, value: value || [] });
  },

  track(code) {
    const normalizedCode = code.replace(/(^:)|(:$)/g, "");
    const recent = this.favorites.filter(r => r !== normalizedCode);
    recent.unshift(normalizedCode);
    recent.length = Math.min(recent.length, TRACKED_EMOJIS);
    this.favorites = recent;
  },

  reset() {
    const store = new KeyValueStore(STORE_NAMESPACE);
    store.setObject({ key: EMOJI_USAGE, value: [] });
    store.setObject({ key: EMOJI_SELECTED_DIVERSITY, value: 1 });
  }
});
