import { secondsInWeek } from 'date-fns/constants'
import isEqual from 'lodash.isequal'
import { SavedSearch, SavedSearchFilter } from '@/models/SavedSearch'
import { prefectStateNamesWithoutScheduled } from '@/types/states'

export function isSameFilter(filterA: SavedSearchFilter, filterB: SavedSearchFilter): boolean {
  return isEqual(filterA, filterB)
}

export const filterRangePastWeek = { type: 'span', seconds: -secondsInWeek } as const

export const oneWeekFilter: SavedSearchFilter = {
  range: filterRangePastWeek,
  state: [],
  flow: [],
  tag: [],
  deployment: [],
  workPool: [],
  workQueue: [],
}

export const noScheduleFilter: SavedSearchFilter = {
  range: filterRangePastWeek,
  state: prefectStateNamesWithoutScheduled.slice(),
  flow: [],
  tag: [],
  deployment: [],
  workPool: [],
  workQueue: [],
}

export const oneWeekSavedSearch = new SavedSearch({
  id: null,
  name: 'Past week',
  filters: oneWeekFilter,
})

export const excludeScheduledSavedSearch = new SavedSearch({
  id: null,
  name: 'Hide scheduled runs',
  filters: noScheduleFilter,
})

export const customPartialSearch = {
  id: null,
  name: 'Custom',
}

export const unsavedPartialSearch = {
  id: null,
  name: 'Unsaved',
}

export const systemDefaultSavedSearch = oneWeekSavedSearch

export const systemSavedSearches = [
  oneWeekSavedSearch,
  excludeScheduledSavedSearch,
]
