import { d as c } from "../.chunks/forms-BpbQYyEQ.es.js";
import { C as O, i as P, u as I, a as T } from "../.chunks/forms-BpbQYyEQ.es.js";
import { c as y } from "../.chunks/core-Baaq63Be.es.js";
import { watch as h } from "vue";
import { guestLinkToClipboard as p } from "../utils/clipboard.js";
import { camelToSnakeCase as d } from "../utils/string.js";
import { getHash as f, setHash as g } from "../utils/route.js";
import { u as G, a as M } from "../.chunks/utils-MzIaxkRQ.es.js";
import { T as D } from "../.chunks/dialogs.vue_vue_type_script_setup_true_lang-D8WYUfXI.es.js";
class l {
  #s;
  #t;
  /**
   * @deprecated
   */
  #e;
  #a;
  #c;
  #i = [];
  #o = [];
  #r = [];
  #n = [];
  constructor(t) {
    this.#t = t.store, this.#s = this.#t.$id, this.#e = t.options.Page, this.#a = t.options.user, this.#c = t.options.Api, this.#i = t.options.tpaNamesUrlHash || [], this.#o = t.options.tpaNamesStorage || [], this.#r = t.options.tpaNamesStorageLocal || [], this.#n = t.options.tpaNamesGuestLink || [], t.store.genGuestLink = (s, a) => this.genGuestLink(s, a), this.#a.guest_data?.data || (this.#d(), this.#d(!0), this.#u()), this.#S(), this.#E();
    const e = c(() => {
      this.#m(), this.#f(), this.#f(!0);
    });
    t.store.$subscribe(e);
  }
  /**
   * Сгенерировать гостевую ссылку
   *
   * Метод, путь к которому указан в path, должен возвращать сгенерированную ссылку
   */
  async genGuestLink(t, e) {
    const s = this.#g();
    e = Object.assign(e, Object.fromEntries(s));
    const a = await this.#c.gen(t).setParams(e).call();
    if (a?.errors) return;
    const i = a.result;
    await p(i);
  }
  /**
   * Сгенерировать опции для гостевой ссылки
   */
  #g() {
    const t = /* @__PURE__ */ new Map();
    return this.#n.forEach((e) => {
      const s = d(e);
      t.set(s, this.#t[e]);
    }), t;
  }
  /**
   * Установить опции из объекта без фиксации состояния
   */
  #h(t) {
    t.forEach((e, s) => {
      const a = this.#t[s];
      if (e != null && a !== void 0 && e?.constructor && e.constructor === a.constructor) {
        if (s.indexOf("date") === 0 && !Array.isArray(e)) {
          if (typeof e == "string" && !/\d\d\d\d-\d\d-\d\d/.test(e))
            return;
        }
        this.#t[s] = e;
      }
    });
  }
  /**
   * Сгенерировать Map объект с опциями со значениями в виде json строк
   */
  #l(t) {
    const e = /* @__PURE__ */ new Map();
    return t.forEach((s, a) => {
      s !== null && (s = JSON.stringify(s), e.set(a, s));
    }), e;
  }
  /**
   * Сгенерировать Map объект с опциями со значениями в оригинальном виде
   */
  #p(t) {
    const e = /* @__PURE__ */ new Map();
    return t.forEach((s, a) => {
      if (!(s == null || s === "false")) {
        try {
          if (typeof s == "string" && !/^\d\d\d\d-\d\d-\d\d$/.test(s) && (s = JSON.parse(s)), s == null || s === "false") return;
        } catch {
        }
        e.set(a, s);
      }
    }), e;
  }
  /**
   * Установить опции из хеша адреса страницы
   */
  #u() {
    let t;
    try {
      t = JSON.parse(f(this.#s));
    } catch {
    }
    if (!t) return;
    const e = /* @__PURE__ */ new Map();
    this.#i.forEach((s) => {
      const a = t[s];
      a && e.set(s, a);
    }), this.#h(e);
  }
  /**
   * Сохранить опции в хеш адреса страницы
   */
  #m() {
    const t = /* @__PURE__ */ new Map();
    this.#i.forEach((a) => {
      const i = this.#t[a];
      t.set(a, i);
    });
    const e = Object.fromEntries(t), s = JSON.stringify(e);
    g(this.#s, s);
  }
  /**
   * Установить опции из localStorage
   * @param isLocal - сохранить с учетом адреса страницы
   */
  #d(t = !1) {
    const e = /* @__PURE__ */ new Map();
    let s = this.#o, a = "state:" + this.#s;
    t && (s = this.#r, a = "state:" + this.#s + ":" + location.pathname), s.forEach((o) => {
      const r = localStorage.getItem(a + ":" + o);
      e.set(o, r);
    });
    const i = this.#p(e);
    this.#h(i);
  }
  /**
   * Сохранить опции в localStorage
   * @param isLocal - сохранить с учетом адреса страницы
   */
  #f(t = !1) {
    const e = /* @__PURE__ */ new Map();
    let s = this.#o, a = "state:" + this.#s;
    t && (s = this.#r, a = "state:" + this.#s + ":" + location.pathname), s.forEach((o) => {
      const r = this.#t[o];
      e.set(o, r);
    });
    const i = this.#l(e);
    s.forEach((o) => {
      const r = i.get(o);
      localStorage.setItem(a + ":" + o, r);
    });
  }
  /**
   * Установить опции из гостевой ссылки
   */
  #S() {
    const t = this.#a?.guest_data?.data;
    if (!t) return;
    this.#a.id === -1 && (this.#a.positionsReverseDates = t.positionsReverseDates);
    const e = /* @__PURE__ */ new Map();
    this.#n.forEach((i) => {
      const o = t[i];
      e.set(i, o);
    });
    const s = this.#p(e);
    this.#h(s);
    const a = $(".mod_guest_title");
    if (this.#t.competitorsIds?.length === 1 && this.#e.page.data.competitors) {
      let i = this.#e.page.data.competitors.filter((o) => o.id === t.competitorsIds[0]);
      i.length && ($("a", a).attr("href", "http://" + i[0].url), $("a", a).text(i[0].name));
    }
  }
  /**
   * Подготовить входные параметры перед инициализацией основного функционала
   *
   * Входные параметры устанавливаются при открытии страницы
   *
   * Входные параметры могут меняться пользоваталем и устаревать
   */
  #E() {
    this.#t.regionsIndexes && h(this.#t.regionsIndexes, (t) => {
      if (!t.length) return;
      t.forEach((a, i) => t[i] = a);
      const e = TplProjectSelectorRegion.genSearchersMap(), s = [];
      e.forEach((a) => {
        a.regions.forEach((i) => {
          i.index !== -1 && s.push(i.index);
        });
      }), this.#t.regionsIndexes = t.filter((a) => s.includes(a));
    }, { immediate: !0 }), this.#t.competitorsIds && h(this.#t.competitorsIds, (t) => {
      if (!t.length) return;
      t.forEach((s, a) => t[a] = s);
      const e = [this.#e.page.data.project.id];
      this.#e.page.data.project.competitors.forEach((s) => {
        s.on >= 0 && e.push(s.id);
      }), this.#t.competitorsIds = t.filter((s) => e.includes(s));
    }, { immediate: !0 });
  }
}
const k = (n) => {
  const t = n;
  !t.options.tpaNamesUrlHash?.length && !t.options.tpaNamesStorage?.length && !t.options.tpaNamesStorageLocal?.length && !t.options.tpaNamesGuestLink?.length || new l(t);
};
export {
  O as Core,
  D as TopDialogWorker,
  y as corePlugin,
  P as i18nPlugin,
  k as piniaTPAPlugin,
  G as useAsyncTopDialog,
  I as useI18n,
  T as useI18nLang,
  M as useTopDialog
};
//# sourceMappingURL=app.js.map
