import type { poiData } from './usePoiData';
import { usePoiData } from './usePoiData';
import { useStore } from './useStore';
import type { Tag } from '../types/PointOfInterest';

export interface poiFilteredData extends poiData {
  filterTags: Tag[] | null;
  setFilterTags: (tags: Tag[]) => void;
  filterCategories: string[];
  setFilterCategories: (categories: string[]) => void;
}

export const useFilteredPoiData = (): poiFilteredData => {
  const { data } = usePoiData();
  const filterTags = useStore((store) => store.filterTags);
  const setFilterTags = useStore((state) => state.setFilterTags);
  const filterCategories = useStore((store) => store.filterCategories);
  const setFilterCategories = useStore((state) => state.setFilterCategories);

  let filteredData = data;
  if (filterTags?.length) {
    filteredData = filteredData?.filter(
      (poi) => !filterTags.filter((fTag) => !poi.tags.find((tag) => tag.id === fTag.id)).length,
    );
  }
  if (filterCategories?.length) {
    filteredData = filteredData?.filter((poi) => !!filterCategories.find((category) => poi.category === category));
  }

  return {
    data: filteredData,
    filterTags,
    setFilterTags,
    filterCategories,
    setFilterCategories,
  };
};