import type { SoloWorkspaceStore } from './store'
import type { SoloColumnStatus, SoloTask, SoloUnassignedStory } from './types'

const EMPTY_TASKS: SoloTask[] = []
const EMPTY_STORIES: SoloUnassignedStory[] = []

export function selectSoloTasksForColumn(
  status: SoloColumnStatus,
): (s: SoloWorkspaceStore) => SoloTask[] {
  return (s) => {
    const ids = s.relations.taskIdsByColumn[status]
    if (!ids || ids.length === 0) return EMPTY_TASKS
    const out: SoloTask[] = []
    for (const id of ids) {
      const task = s.entities.tasksById[id]
      if (task) out.push(task)
    }
    return out.length === 0 ? EMPTY_TASKS : out
  }
}

export function selectSoloUnassignedStories(s: SoloWorkspaceStore): SoloUnassignedStory[] {
  if (s.relations.unassignedStoryIds.length === 0) return EMPTY_STORIES
  const out: SoloUnassignedStory[] = []
  for (const id of s.relations.unassignedStoryIds) {
    const story = s.entities.unassignedStoriesById[id]
    if (story) out.push(story)
  }
  return out.length === 0 ? EMPTY_STORIES : out
}

export function selectSoloTaskById(
  taskId: string | null,
): (s: SoloWorkspaceStore) => SoloTask | null {
  return (s) => {
    if (!taskId) return null
    return s.entities.tasksById[taskId] ?? null
  }
}
