import { create } from "zustand";
import { immer } from "zustand/middleware/immer";
import { persist } from "zustand/middleware";

export const RANGE_FILTERS_KEYS = [
  'doors',
  'flat_cnt',
  'rival_post_cnt',
  'rival_pvz_cnt',
  'target_post_cnt',
  'flats_cnt',
  'tc_cnt',
  'culture_cnt',
  'mfc_cnt',
  'public_stop_cnt',
  'supermarket_cnt',
  'target_dist',
  'metro_dist',
]

export const RANGE_FILTERS_MAP = {
  common: {
    name: "Общие",
    doors: "Кол-во подъездов в жилом доме",
    flat_cnt: "Кол-во квартир в подъезде жилого дома",
  },
  objects_dist: {
    name: "Кол-во объектов в окрестности 500м",
    rival_post_cnt: "Кол-во постаматов других сетей",
    rival_pvz_cnt: "Кол-во ПВЗ",
    target_post_cnt: "Кол-во постаматов Мой постамат",
    flats_cnt: "Кол-во квартир в окрестности",
    tc_cnt: "Кол-во торговых центров",
    culture_cnt: "Кол-во объектов культуры (театры, музей и тд)",
    mfc_cnt: "Кол-во МФЦ",
    public_stop_cnt: "Кол-во остановок ОТ",
    supermarket_cnt: "Кол-во супермаркетов",
    target_dist: "Расстояние до постамата Мой постамат",
    metro_dist: "Расстояние до метро",
  },
}

export const CATEGORIES_MAP = {
  "ПВЗ": "Расстояние до ПВЗ сети",
  "Постаматы прочих сетей": "Расстояние до постамата сети",
}

export const INITIAL = {
  prediction: [0, 0],
  categories: [],
  region: null,
  doors__gt: 0,
  doors__lt: 0,
  flat_cnt__gt: 0,
  flat_cnt__lt: 5000,
  rival_post_cnt__gt: 0,
  rival_post_cnt__lt: 5000,
  rival_pvz_cnt__gt: 0,
  rival_pvz_cnt__lt: 5000,
  target_post_cnt__gt: 0,
  target_post_cnt__lt: 5000,
  flats_cnt__gt: 0,
  flats_cnt__lt: 5000,
  tc_cnt__gt: 0,
  tc_cnt__lt: 5000,
  culture_cnt__gt: 0,
  culture_cnt__lt: 5000,
  mfc_cnt__gt: 0,
  mfc_cnt__lt: 5000,
  public_stop_cnt__gt: 0,
  public_stop_cnt__lt: 5000,
  supermarket_cnt__gt: 0,
  supermarket_cnt__lt: 5000,
  target_dist__gt: 0,
  target_dist__lt: 5000,
  metro_dist__gt: 0,
  metro_dist__lt: 5000,
};

const INITIAL_RANGES = {
  prediction: [0, 0],
  doors: [0, 0],
  flat_cnt: [0, 5000],
  rival_post_cnt: [0, 5000],
  rival_pvz_cnt: [0, 5000],
  target_post_cnt: [0, 5000],
  flats_cnt: [0, 5000],
  tc_cnt: [0, 5000],
  culture_cnt: [0, 5000],
  mfc_cnt: [0, 5000],
  public_stop_cnt: [0, 5000],
  supermarket_cnt: [0, 5000],
  target_dist: [0, 5000],
  metro_dist: [0, 5000],
}

const store = (set) => ({
  filters: INITIAL,
  ranges: INITIAL_RANGES,

  setPrediction: (value) => {
    set((state) => {
      state.filters.prediction = value;
    });
  },

  setCategories: (categories) =>
    set((state) => {
      state.filters.categories = categories;
    }),

  setRegion: (value) =>
    set((state) => {
      state.filters.region = value;
    }),

  setFilterWithKey: (value, key) =>
    set((state) => {
      state.filters[`${key}__gt`] = value[0];
      state.filters[`${key}__lt`] = value[1];
    }),

  setRanges: (value) =>
    set((state) => {
      state.ranges = value;
    }),

  clear: (fullRange) =>
    set((state) => {
      if (!fullRange) {
        state.filters = INITIAL;
        return state;
      }

      state.filters = {
        ...INITIAL,
        prediction: fullRange.prediction,
      };
    }),
});

export const usePendingPointsFilters = create(
  persist(immer(store), { name: "postnet/pending-filters" })
);
