import { useDocument } from 'src/composables/useDocument';
import { fileTags } from 'src/pages/captaciones/consts';
import { computed, inject } from 'vue';
import { contextKey, DocumentsDialogContext } from './models';

export function useDocumentsTags() {
  const context = inject<DocumentsDialogContext>(contextKey)!;
  const { documents, documentFilter } = context;
  const { tiposDocumentos } = useDocument();

  const typesFilterOptions = computed(() => {
    const types = tiposDocumentos.value.map((type) => ({ value: type.ID_TIPO_DOCUMENTO, label: type.NOMBRE }));
    return [{ label: 'Todos', value: -1 }, ...types].map((type) => {
      return {
        label: type.label,
        value: type.value,
        isSelected: documentFilter?.types?.includes(type.value),
      };
    });
  });

  const tagFilterOptions = computed(() => {
    return [{ label: 'Todos', value: 'all' }, ...fileTags].map((tag) => {
      return {
        ...tag,
        isSelected: documentFilter?.tags?.includes(tag.value),
      };
    });
  });

  const countTypesFilterSelected = computed(() => typesFilterOptions.value.filter((option) => option.value !== -1 && option.isSelected).length);
  const countTagsFilterSelected = computed(() => tagFilterOptions.value.filter((option) => option.value !== 'all' && option.isSelected).length);
  const tagsAvailableToFilter = computed(() => {
    let tagsOfDocuments: string[] = [];
    for (let { TAGS } of documents.value) {
      const arr = TAGS?.split(',') || [];
      for (let tag of arr) {
        if (!tagsOfDocuments.includes(tag)) {
          tagsOfDocuments.push(tag);
        }
      }
    }
    return tagsOfDocuments;
  });
  const typesAvailableToFilter = computed(() => {
    let items: number[] = [];
    for (let { ID_TIPO_DOCUMENTO } of documents.value) {
      if (!items.includes(ID_TIPO_DOCUMENTO!)) {
        items.push(ID_TIPO_DOCUMENTO!);
      }
    }
    return items;
  });

  return {
    tagsAvailableToFilter,
    typesAvailableToFilter,
    countTypesFilterSelected,
    countTagsFilterSelected,
    typesFilterOptions,
    tagFilterOptions,
  };
}
