export interface AllocationVisibilityInput {
  totalAssignments: number;
  totalDemands: number;
  visibleAssignments: number;
  visibleDemands: number;
  hidePastProjects: boolean;
  hideCompletedProjects: boolean;
  hideDraftProjects: boolean;
}

export interface AllocationEmptyState {
  title: string;
  detail: string;
  showResetAction: boolean;
}

export function shouldAutoRelaxAllocationFilters(input: AllocationVisibilityInput): boolean {
  const totalRows = input.totalAssignments + input.totalDemands;
  const visibleRows = input.visibleAssignments + input.visibleDemands;
  const hasActiveProjectFilters = input.hidePastProjects || input.hideCompletedProjects || input.hideDraftProjects;

  return totalRows > 0 && visibleRows === 0 && hasActiveProjectFilters;
}

export function getAllocationEmptyState(input: AllocationVisibilityInput): AllocationEmptyState {
  const totalRows = input.totalAssignments + input.totalDemands;

  if (shouldAutoRelaxAllocationFilters(input)) {
    const assignmentLabel = input.totalAssignments === 1 ? "assignment" : "assignments";
    const demandLabel = input.totalDemands === 1 ? "demand" : "demands";
    const hiddenSummary =
      input.totalDemands > 0
        ? `${input.totalAssignments} ${assignmentLabel} and ${input.totalDemands} ${demandLabel} are hidden by the active project filters.`
        : `${input.totalAssignments} ${assignmentLabel} are hidden by the active project filters.`;

    return {
      title: "No assignments match the active filters.",
      detail: hiddenSummary,
      showResetAction: true,
    };
  }

  if (totalRows === 0) {
    return {
      title: "No assignments found.",
      detail: "Create a planning entry or relax the current project filters once data is available.",
      showResetAction: false,
    };
  }

  return {
    title: "No assignments found.",
    detail: "No visible assignment rows remain after the current filters were applied.",
    showResetAction: false,
  };
}
