/**
 * Логика гейтинга сохранения формы ремонта (Create/Edit). Вынесена из
 * CreateRepairPage, чтобы быть единым источником правды и покрытой тестами:
 * `canSubmit` теперь буквально «нет причины блокировки», без расхождения
 * между двумя проверками.
 *
 * Принимает структурные срезы стейта (только нужные поля), поэтому не зависит
 * от конкретных типов страниц.
 */
export interface RepairFormPhotoLike {
  status: "uploading" | "uploaded" | "error" | string;
}

export interface RepairFormWorkLike {
  unlocked: boolean;
  override_comment: string;
}

/** Возвращает причину, по которой сохранение заблокировано, или "" если можно. */
export function repairSubmitWhyDisabled(
  photos: RepairFormPhotoLike[],
  works: RepairFormWorkLike[],
): string {
  if (photos.length === 0) return "Добавьте хотя бы одно фото";
  if (photos.some((p) => p.status !== "uploaded")) return "Дождитесь окончания загрузки фото";
  if (works.length === 0) return "Добавьте хотя бы одну работу";
  const unlockedNoComment = works.find((w) => w.unlocked && !w.override_comment.trim());
  if (unlockedNoComment) return "Укажите комментарий к ручной правке цены";
  return "";
}

export function repairCanSubmit(
  photos: RepairFormPhotoLike[],
  works: RepairFormWorkLike[],
): boolean {
  return repairSubmitWhyDisabled(photos, works) === "";
}
