import type {
  ActiveEntityViewSchema,
  activeResearchType,
  ActiveTab,
  EntityViewSchema,
  ListEntity,
  qruleActiveTab,
  qruleActiveTabGetter,
  SelectedItemEntity,
  SimilarInfo,
} from "~/types/entityType";

export const useEntityStore = defineStore("entityStore", {
  persist: {
    storage: piniaPluginPersistedstate.localStorage(),
    pick: [
      "draftSchema",
      "draftActiveStep",
      "draftActiveSchema",
      "draftSaveBoxSchema",

      "activeTab",
      "isReadingMode",
      "entityViewSchema",
      "activeEntityViewSchema",

      "qruleActiveTab",
      "qruleSchema",
      "qruleActiveSchema",

      "listHighlightText",
      "activeResearchType",
    ],
  },
  state: () => ({
    activeTab: undefined as ActiveTab | undefined,
    entityViewSchema: undefined as EntityViewSchema | undefined,
    selectedItemEntity: undefined as SelectedItemEntity | undefined,
    listEntity: undefined as ListEntity | undefined,
    activeEntityViewSchema: undefined as ActiveEntityViewSchema | undefined,
    similarInfo: {} as SimilarInfo | undefined,
    vuexEntity: undefined, //پیدا نکردم
    qruleActiveSchema: undefined as qruleActiveTabGetter | undefined,
    qruleActiveTab: undefined as qruleActiveTab | undefined,
    activeResearchType: undefined as activeResearchType | undefined,
    isReadingMode: false,
    fontSize: undefined as undefined | string,
    selectedText: undefined as undefined | string,
    showSidebar: false,
    statusId: undefined,
    statusButton: undefined,
    statusEntityViewPage: undefined,
    textSteps: [],
    listHighlightText: [],
    breadCrumb: [],

    // draft law
    nlpTree: undefined,
    draftActiveStep: undefined,
    draftActiveSchema: undefined,
    draftSchema: undefined,
    draftSaveBoxSchema: [],
    // draft law

    qruleSchema: undefined,
    queryParams: undefined,
    statusRemovCheckBox: undefined,
    requestSimilar: false, // این متغییر دیگه نباید استفاده شود
    newSimilar: false, // این متغییر دیگه نباید استفاده شود
    showModal: false,
    changePagForFish: 0,
    itemEditForFish: undefined,
    fishActions: undefined,
    annotationActions: undefined,
    itemEditForAnnotation: undefined,
    showModalAnnotation: false,
  }),
  getters: {
    // start: draft page
    nlpTreeGetter(state) {
      return state.nlpTree;
    },
    draftActiveStepGetter(state) {
      return state.draftActiveStep;
    },
    draftSchemaGetter(state) {
      return state.draftSchema;
    },
    draftActiveSchemaGetter(state) {
      return state.draftActiveSchema;
    },
    draftSaveBoxSchemaGetter(state) {
      return state.draftSaveBoxSchema;
    },
    // end: draft page

    vuexEntityGetter(state) {
      return state.vuexEntity;
    },
    breadCrumbGetter(state) {
      return state.breadCrumb;
    },

    entityViewSchemaGetter(state) {
      return state.entityViewSchema;
    },
    activeTabGetter(state) {
      return state.activeTab;
    },
    qruleActiveTabGetter(state) {
      return state.qruleActiveTab;
    },
    qruleActiveSchemaGetter(state) {
      return state.qruleActiveSchema;
    },
    selectedItemEntityGetter(state) {
      return state.selectedItemEntity;
    },
    listEntityGetter(state) {
      return state.listEntity;
    },
    activeEntityViewSchemaGetter(state) {
      return state.activeEntityViewSchema;
    },
    fontSizeGerrer(state) {
      return state.fontSize;
    },
    statusButtonGetter(state) {
      return state.statusButton;
    },
    statusEntityViewPageGetter(state) {
      return state.statusEntityViewPage;
    },
    textStepsGetter(state) {
      return state.textSteps;
    },
    showSidebarGetter(state) {
      return state.showSidebar;
    },
    similarInfoGetter(state) {
      return state.similarInfo;
    },
    selectedTextGetter(state) {
      return state.selectedText;
    },
    listHighlightTextGetter(state) {
      return state.listHighlightText;
    },
    activeResearchTypeGetter(state) {
      return state.activeResearchType;
    },
    isReadingModeGetter(state) {
      return state.isReadingMode;
    },
  },
  actions: {
    // start: draft page
    nlpTreeSetter(nlpTree = undefined) {
      this.nlpTree = nlpTree;
    },
    draftActiveStepSetter(draftActiveStep = undefined) {
      this.draftActiveStep = draftActiveStep;
    },
    draftSchemaSetter(draftSchema = undefined) {
      this.draftSchema = draftSchema;
    },
    draftActiveSchemaSetter(draftActiveSchema = undefined) {
      this.draftActiveSchema = draftActiveSchema;
    },
    draftSaveBoxSchemaSetter(draftSaveBoxSchema = []) {
      this.draftSaveBoxSchema = draftSaveBoxSchema;
    },
    // end: draft page

    vuexEntitySetter(vuexEntity = undefined) {
      this.vuexEntity = vuexEntity;
    },
    breadCrumbSetter(newItem = undefined) {
      if (!newItem) this.breadCrumb = [];
      else this.breadCrumb = [...this.breadCrumb, newItem];
    },

    entityViewSchemaSetter(entityViewSchema = undefined) {
      this.entityViewSchema = entityViewSchema;
    },
    activeEntityViewSchemaSetter(activeEntityViewSchema = undefined) {
      this.activeEntityViewSchema = activeEntityViewSchema;
    },
    qruleActiveTabSetter(qruleActiveTab = undefined) {
      this.qruleActiveTab = qruleActiveTab;
    },
    qruleSchemaSetter(qruleSchema = undefined) {
      this.qruleSchema = qruleSchema;
    },
    qruleActiveSchemaSetter(qruleActiveSchema = undefined) {
      this.qruleActiveSchema = qruleActiveSchema;
    },
    activeTabSetter(activeTab = undefined) {
      this.activeTab = activeTab;
    },
    

    SET_ITEM_ENTITY(item=undefined) {
      this.selectedItemEntity = item;
    },
    SET_LIST_ENTITY(list=undefined) {
      this.listEntity = list;
    },
    SET_FONT(fontSize=undefined) {
      this.fontSize = fontSize;
    },
    // SET_QUERY( queryParams) {
    //   this.queryParams = queryParams;
    // },
    SET_ITEM_LIST_SELECTED_ID(itemListIdSelected) {
      this.itemListIdSelected = itemListIdSelected;
    },
    SET_STATUS_BUTTON(statusButton = undefined) {
      this.statusButton = statusButton;
    },
    SET_STATUS_ENTITY_VIEWPAGE(statusEntityViewPage=undefined) {
      this.statusEntityViewPage = statusEntityViewPage;
    },
    SET_STATUS_REMOVE_CHECKBOX(statusRemovCheckBox) {
      this.statusRemovCheckBox = statusRemovCheckBox;
    },
    SET_TEXT_STEPS(textSteps) {
      this.textSteps = textSteps;
    },
    SET_SHOW_SIDEBAR(showSidebar) {
      this.showSidebar = showSidebar;
    },
    SET_REQUEST_SIMILAR(requestSimilar) {
      this.requestSimilar = requestSimilar;
    },
    SET_NEW_SIMILAR(newSimilar) {
      this.newSimilar = newSimilar;
    },
    selectedTextSetter(selectedText) {
      this.selectedText = selectedText;
    },
    SET_SHOW_MODAL(showModal) {
      this.showModal = showModal;
    },
    SET_CHANGE_PAG_FOR_FISH(changePagForFish) {
      this.changePagForFish = changePagForFish;
    },
    itemEditForFishSetter(itemEditForFish) {
      this.itemEditForFish = itemEditForFish;
    },
    fishActionsSetter(fishActions) {
      this.fishActions = fishActions;
    },
    annotationActionsSetter(annotationActions) {
      this.annotationActions = annotationActions;
    },
    itemEditForAnnotationSetter(itemEditForAnnotation) {
      this.itemEditForAnnotation = itemEditForAnnotation;
    },
    showModalAnnotationSetter(showModalAnnotation) {
      this.showModalAnnotation = showModalAnnotation;
    },
    similarInfoSetter(similarInfo) {
      this.similarInfo = similarInfo;
    },
    listHighlightTextSetter(listHighlightText) {
      // this.listHighlightText = listHighlightText;
      // if (!this.listHighlightText.includes(listHighlightText)) {
      //   this.listHighlightText.push(listHighlightText);
      // }
      const exists = this.listHighlightText.some(
        (item) => item.text === listHighlightText.text
      );

      if (!exists) {
        this.listHighlightText.push(listHighlightText);
      }
    },
    removeHighlightTextSetter(listHighlightText) {
      this.listHighlightText = this.listHighlightText.filter(
        (item) => item.text !== listHighlightText.text
      );
    },
    toggleShowHighlightSetter(newState) {
      this.listHighlightText.forEach((item) => (item.show = newState));
    },
    activeResearchTypeSetter(activeResearchType) {
      this.activeResearchType = activeResearchType;
    },
    isReadingModeSetter(isReadingMode) {
      this.isReadingMode = isReadingMode;
    },
  },
});
// export default {
//   namespaced:true,

//   state,
//   actions,
//   mutations,
//   getters
// };